Javascript Web串行API-自动读取

Javascript Web串行API-自动读取,javascript,html,serial-port,Javascript,Html,Serial Port,我正在使用ChromeWebSerialAPI,当我点击按钮并手动选择端口时,它工作正常。现在我想在打开页面时自动选择端口(COM1)。我不想单击按钮并选择端口。另外,当我重新加载页面时,我失去了与端口的连接。有人知道我怎么做吗?提前谢谢 这是我的代码: “严格使用”; 类SerialScaleController{ 构造函数(){ this.encoder=新的TextEncoder(); this.decoder=新的TextDecoder(); } 异步初始化(){ if(导航器中的“串

我正在使用ChromeWebSerialAPI,当我点击按钮并手动选择端口时,它工作正常。现在我想在打开页面时自动选择端口(COM1)。我不想单击按钮并选择端口。另外,当我重新加载页面时,我失去了与端口的连接。有人知道我怎么做吗?提前谢谢

这是我的代码:

“严格使用”;
类SerialScaleController{
构造函数(){
this.encoder=新的TextEncoder();
this.decoder=新的TextDecoder();
}
异步初始化(){
if(导航器中的“串行”){
试一试{
console.log(导航器)
const-port=await-navigator.serial.requestPort();
等待端口打开({波特率:9600});
this.reader=port.readable.getReader();
let signals=wait port.getSignals();
}
捕捉(错误){
console.error('打开串行端口时出错:',err);
}
}
否则{
console.error('您的浏览器中似乎未启用Web序列号。请尝试通过访问来启用它:');
控制台。错误('chrome://flags/#enable-实验性web平台功能);
控制台。错误('opera://flags/#enable-实验性web平台功能);
控制台。错误('edge://flags/#enable-实验性web平台功能);
}
}
异步读取(){
试一试{
const readerData=wait this.reader.read();
console.log(readerData)
返回this.decoder.decode(readerData.value);
}
捕捉(错误){
const errorMessage=`读取数据时出错:${err}`;
控制台错误(错误消息);
返回错误消息;
}
}
}
const serialScaleControl=新的serialScaleControl();
const connect=document.getElementById('connect-to-serial');
const getSerialMessages=document.getElementById('get-serial-messages');
connect.addEventListener('pointerdown',()=>{
SerialScaleControl.init();
});
getSerialMessages.addEventListener('pointerdown',async()=>{
getSerialMessage();
});
异步函数getSerialMessage(){
document.querySelector(“#serial messages container.message”).innerText+=wait serialScaleController.read()
}

网络系列
与串行设备连接
获取串行消息

您是否考虑过使用cookie作为“持久”设置? 即


祝你好运

如果用户曾经通过requestPort()批准过您一次,那么将来您可以使用getPorts()来获取以前拥有的端口数组,类似这样

// CanPrompt is 1 if being called from user button click etc
// Or 0 if calling from serial.onconnect or page load checking for device

var port = null;
if (CanPrompt) {
    port = await navigator.serial.requestPort();
} else {
    port = await navigator.serial.getPorts();
    if ((port !== null) && (Array.isArray(port)) && (port.length > 0)) {
        port = port[0];
    } else return;
}
await port.open({ baudRate: 19200 });
更多背景信息可以在一个已关闭的git问题中找到