相关疑难解决方法(0)

如何修复'未经检查的runtime.lastError:消息端口在收到响应之前关闭'chrome问题?

我正在为我的项目使用VueJS和Laravel.这个问题最近开始显现,甚至在旧的git分支中也显示出来.

此错误仅在Chrome浏览器中显示.

google-chrome laravel vue.js

69
推荐指数
9
解决办法
8万
查看次数

使用Chrome API时未经检查的runtime.lastError

chrome.fileSystem在我的应用程序中使用API来打开文件.单击Cancel文件选择器对话框的按钮时,会发生错误:

runtime.lastError运行时未选中fileSystem.chooseEntry:用户已取消

如何解决这个错误?

javascript google-chrome-extension google-chrome-app

25
推荐指数
3
解决办法
2万
查看次数

chrome 扩展 - sendResponse 不等待异步功能

我有一个异步问题(我相信)。sendResponse()contentscript.js中不等待getThumbnails()返回。

我在popup.js 中发送消息

chrome.tabs.sendMessage(tabs[0].id, {message: "get_thumbnails", tabUrl: tabs[0].url},
      function (respThumbnails) {
            const thumbUrl = respThumbnails.payload;
            console.log("payload", thumbUrl)   
      }
);
Run Code Online (Sandbox Code Playgroud)

然后,在contentscript.js这条消息:

chrome.runtime.onMessage.addListener(async function(request,sender,sendResponse) {
    if(request.message === "get_thumbnails") {
        const payload = await getThumbnails();
        console.log("thumbPayload after function:", payload)
        sendResponse({payload:payload});   
    }
});


async function getThumbnails() {
    let tUrl = null;
    var potentialLocations = [
        {sel: "meta[property='og:image:secure_url']",   attr: "content" },
        {sel: "meta[property='og:image']",              attr: "content" },
    ];

    for(s of potentialLocations) { …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome-extension

9
推荐指数
1
解决办法
3583
查看次数

ManifestV3 新承诺错误:消息端口在收到响应之前关闭

我正在开发一个扩展,它在其内容脚本和后台服务工作人员(清单 V3)之间进行大量消息传递,并且我注意到新的基于 Promise 的 V3 API 存在一个奇怪的问题,特别是 sendResponse () 功能。

对于需要响应的 API 调用,一切正常。但是,如果我不需要响应并且不提供回调函数或使用 Promise 的 .then() 方法(或 async/await),则会引发 Promise 错误 - 它表示“消息端口在响应之前关闭”已收到。”

奇怪的是,调用仍然有效,所以我猜这个错误更像是一个警告。

代码示例:

在内容脚本中,向后台发送消息:

chrome.runtime.sendMessage({ type: 'toggle_setting' })
Run Code Online (Sandbox Code Playgroud)

后台脚本获取消息并执行某些操作,然后退出而不发送响应:

chrome.runtime.onMessage.addListener( (message, sender, sendResponse) => {
  if (message.type === 'toggle-setting') {
    //* do whatever it does
  }
})
Run Code Online (Sandbox Code Playgroud)

该后台代码是引发上述错误的原因。但是,如果我向其中添加一行并调用不带参数的 sendResponse() 函数,则不会发生错误。

chrome.runtime.onMessage.addListener( (message, sender, sendResponse) => {
  sendResponse()
  if (message.type === 'toggle-setting') {
    //* do whatever it does
  }
})
Run Code Online (Sandbox Code Playgroud)

因此,这消除了错误消息,但我不太清楚为什么在不需要或不需要响应时有必要这样做。是否有其他方法可以向基于 Promise 的 V3 API 发出信号,或者现在是否有必要调用 sendResponse(),即使您不需要?

javascript google-chrome-extension chrome-extension-manifest-v3

8
推荐指数
1
解决办法
2608
查看次数

Chrome 扩展 - 消息端口在收到响应之前关闭

我在简单的 chrome 扩展中收到此错误。我正在尝试将一些消息从 background.js 传递到我的内容脚本。第一条消息将毫无问题地发送,但第二条消息给我这个错误_generated_background_page.html:1 Unchecked runtime.lastError: The message port closed before a response was received.

我需要在收到第一条消息后传递内容脚本的响应,这是因为我需要从中删除事件侦听器,webRequest.onCompleted否则我将遇到消息传递的循环问题。我不确定我是否在removeListener功能上也做得很好。

这是我的代码,任何帮助将不胜感激

内容脚本.js

const m3u8 = new M3U8(); 
console.log(m3u8);
chrome.runtime.onMessage.addListener( message => {    
    console.log(message);
    chrome.runtime.sendMessage({status: 'ok'})
    const download = m3u8.start(message.url);
    download.on("progress", progress => {
        console.log(progress);
    }).on("finished", finished => {
        console.log(finished);
    }).on("error", error => {
        console.log(error);
    });
});
Run Code Online (Sandbox Code Playgroud)

背景.js

const sendURL = (request) => {
    chrome.tabs.sendMessage(request.tabId, {url: request.url}, response => {
        if( response.status === 'ok' ){
            chrome.webRequest.onCompleted.removeListener( sendURL )
        } …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome-extension

6
推荐指数
1
解决办法
2万
查看次数