相关疑难解决方法(0)

升级或安装后重新注入Chrome扩展程序内容脚本

安装或升级我正在处理的Chrome扩展程序后,不会重新注入内容脚本(在清单中指定),因此需要页面刷新才能使扩展能够正常工作.有没有办法强制脚本再次注入?

我相信我可以通过从清单中删除它们然后处理在后台页面中注入哪些页面来以编程方式再次注入它们,但这不是一个好的解决方案.

我不想自动刷新用户的标签,因为这可能会丢失一些数据.安装或升级扩展时,Safari会自动刷新所有页面.

browser-extension google-chrome-extension content-script

48
推荐指数
3
解决办法
9476
查看次数

Chrome扩展程序消息传递:未经检查的runtime.lastError:无法建立连接。接收端不存在

我的chrome扩展程序具有以下两个JavaScript:

background.js,作为后台脚本运行:

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    if (message.data == "takeScreenshot") {
        var resp = sendResponse;
        chrome.tabs.captureVisibleTab(function(screenshotUrl) {
            resp({
                screenshot: screenshotUrl
            });
        });
        return true; // Return true to tell that the response is sent asynchronously
    } else {
        return "TestReply";
    }
});
Run Code Online (Sandbox Code Playgroud)

api.js,作为可通过网络访问的资源运行:

window.takeScreenshot = (function() {
    var isTakingScreenshot = false; // Semaphore
    return function() {
        if(isTakingScreenshot) return Promise.reject();
        isTakingScreenshot = true;
        return new Promise(function(resolve, reject) {
            chrome.runtime.sendMessage("eomfljlchjpefnempfimgminjnegpjod", "takeScreenshot", function(response) {
                console.log(response);
                isTakingScreenshot = false;
                resolve(response.screenshot);
            });
        }); …
Run Code Online (Sandbox Code Playgroud)

google-chrome-extension

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

Chrome 扩展程序“接收端不存在”。错误

我正在开发 Chrome 扩展程序,但最近我注意到我收到了以下错误(指向 的第一行popup.html):

未经检查的 runtime.lastError: 无法建立连接。接收端不存在。

我在这里找到了一个类似的问题。但是那里的错误是由background我没有在清单上声明的属性引起的。

chrome.extension.onMessage.addListenercontents.js脚本上使用来侦听事件并chrome.tabs.sendMessagepopup.js脚本上使用来发送事件。大多数情况下一切正常,但有时我会收到上述错误并且没有任何请求执行任何操作。

manifest.json格式如下:

{
    "manifest_version": 2,
    "name": "APP_NAME",
    "description": "APP_DESCRIPTION",
    "version": "APP_VERSION",
    "browser_action": {
        "default_icon": "icon.png",
        "default_popup": "popup.html"
    },
    "permissions": [
        "activeTab",
        "storage",
        "clipboardRead",
        "clipboardWrite"
    ],
    "content_scripts": [
        {
            "matches": [
                "<all_urls>"
            ],
            "js": [
                "content.js"
            ],
            "css": [
                "content.css"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

消息侦听器示例:

{
    "manifest_version": 2,
    "name": "APP_NAME",
    "description": "APP_DESCRIPTION",
    "version": "APP_VERSION",
    "browser_action": {
        "default_icon": …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome-extension

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

如何从内容脚本正确处理chrome扩展更新

在后台页面中,我们可以使用检测扩展更新chrome.runtime.onInstalled.addListener.

但是在更新扩展后,所有内容脚本都无法连接到后台页面.我们得到一个错误:Error connecting to extension ....

可以使用chrome.tabs.executeScript... 重新注入内容脚本但是如果我们有一个敏感数据应该在更新之前保存并在更新后使用怎么办?我们能做什么?

此外,如果我们重新注入所有内容脚本,我们应该正确地拆除以前的内容脚本.

在不丢失用户数据的情况下,从内容脚本处理扩展更新的正确方法是什么?

javascript google-chrome google-chrome-extension

5
推荐指数
1
解决办法
1289
查看次数

重新加载Chrome扩展程序后,chrome.runtime.sendMessage会从内容脚本中抛出异常

我将注入的内容脚本中的消息发送回Chrome扩展程序中的后台脚本,如下所示:

chrome.runtime.sendMessage({action: "myResult"});
Run Code Online (Sandbox Code Playgroud)

这很好,直到我重新加载我的扩展(通过转到设置 - >扩展 - >"重新加载(Ctrl + R)"为我的扩展.)

反过来,当我的后台脚本启动时,它反复调用chrome.tabs.executeScript所有打开的选项卡以编程方式重新注入我的内容脚本(正如我在这个问题中所示).

但是在我这样做之后,如果我sendMessage从我的内容脚本中调用第一行,它会抛出此异常:

错误:连接到扩展名my_extension_id时出错

知道为什么会这样吗?

javascript google-chrome google-chrome-extension content-script

5
推荐指数
1
解决办法
2029
查看次数

Chrome 扩展:获取 URL 时扩展上下文无效

我正在将一些图像从我的 chrome 扩展文件夹之一检索到网站 DOM,每次我重新加载扩展时,我都会收到“扩展上下文无效”错误。当我执行“chrome.storage.local.set”时也会发生同样的事情。

做了一些研究,我意识到这个错误与这个答案中很好解释的事实有关,但由于我没有在我的内容脚本和 background.js 之间传递消息,我想知道为什么会发生这种情况。

这是我的脚本的一部分(通过 popup.js 中的 chrome.tabs.executeScript 注入),在那里我遇到了错误,我基本上是将图像从我的扩展文件夹之一注入到网站 DOM:

  for (let k = 0; k < incomingChatTags.length; k++) {
    let normalHolderTag = $(incomingChatTags[k]).text().toLowerCase();
    switch (normalHolderTag) {
      case "vip":
        $(incomingChatTags[k]).addClass("ce-vip");
        priorityVal += 300;
        break;
      case "rg":
        $(incomingChatTags[k]).addClass("ce-rg");
        priorityVal += 240;
        break;
      case "accountclosure":
        $(incomingChatTags[k]).addClass("ce-accountclosure");
        priorityVal += 200;
        break;
      case "21com":
        let logo21 = chrome.extension.getURL("/images/21_thumb.png");
        $(incomingChatTags[k]).html('<img src="' + logo21 + '" />');
        $(incomingChatTags[k]).addClass("ce-tag-logo");
        break;
      case "caxino":
        //the console shows the error here and not …
Run Code Online (Sandbox Code Playgroud)

javascript jquery google-chrome google-chrome-extension

5
推荐指数
2
解决办法
521
查看次数