使用executeScript和insertCSS的几个错误

时间:2017-02-26 00:07:07

标签: javascript google-chrome-extension firefox-webextensions

我正在开发的chrome / firefox Web扩展程序正常工作,但在firefox调试器中,它会出现此错误(在后台脚本中):&#34; 错误:脚本返回非结构化克隆数据< /强>&#34;试图运行时

chrome.tabs.executeScript({
    file: "jquery-3.1.1.js",
    runAt: 'document_end'
});
chrome.tabs.executeScript({
    file: "findAndReplaceDOMText.js",
    runAt: 'document_end'
});
chrome.tabs.executeScript({
    file: "content.js",
    runAt: 'document_end'
});

此外,我收到错误&#34; [例外...&#34;组件返回失败代码:0x80070057(NS_ERROR_ILLEGAL_VALUE)[nsIDOMWindowUtils.loadSheetUsingURIString]&#34; nsresult:&#34; 0x80070057(NS_ERROR_ILLEGAL_VALUE)&#34; location:&#34; JS frame :: resource://gre/modules/ExtensionUtils.jsm :: runSafeSyncWithoutClone :: line 60&#34;数据:没有] &#34;与行

chrome.tabs.insertCSS({
    code: "html { visibility:hidden; }",
    runAt: "document_end"
});

对于第一期,我迷路了,而第二期,我不知道非法的价值是什么。

的manifest.json

{
"manifest_version": 2,
"name": "Error Example",
"version": "0.1",

"description": "Replace a word.",
"icons": {
    "48": "icons/black-48.jpg"
},

"permissions": [
    "<all_urls>",
    "activeTab",
    "tabs",
    "webNavigation"
],

"background": {
    "scripts": ["background.js"]
}
}

background.js

var latestList = [];

function run_scripts(whenToRun) {
chrome.tabs.executeScript({
    file: "jquery-3.1.1.js",
    runAt: whenToRun
});
chrome.tabs.executeScript({
    file: "findAndReplaceDOMText.js",
    runAt: whenToRun
});
chrome.tabs.executeScript({
    file: "content.js",
    runAt: whenToRun
});
}

function onBeforeNavigate(details) {
chrome.tabs.insertCSS({
    code: "html { visibility:hidden; }",
    runAt: "document_end"
});
run_scripts("document_end");
}

chrome.webNavigation.onBeforeNavigate.addListener(onBeforeNavigate);

content.js

$(document).ready(function() {

var words_to_replace = [];

function replaceWord() {

    var word1 = "comments";
    var word2 = "bugs";

    reWord1 = new RegExp(word1, "gi");

    findAndReplaceDOMText(document.getElementsByTagName('body')[0], {
        preset: 'prose',
        find: reWord1,
        replace: word2
    });
    $("html").css("visibility", 'visible');
}
replaceWord();
});

整个插件的作用是取代&#34;评论&#34;与&#34;错误&#34;。 insertCSS确保在替换单词之前不会看到页面。 executeScript和insertCSS都会在顶部提到错误,尽管它似乎不会对结果产生影响。

我应该担心错误还是不管它们?

2 个答案:

答案 0 :(得分:0)

我不确定你是否已经解决了所有问题但是对于第二个问题,看起来你试图将CSS插入到已经插入的页面中。我遇到过这个问题一次。在重新插入chrome.tabs.removeCSS之后,第二个错误就消失了。

答案 1 :(得分:0)

对于您的第一个错误,请在 content.js 末尾的新行添加trueundefined 这样你只会得到真正的错误跳转到错误承诺

<强> 原因
executeScript 返回内容脚本的最后一个评估语句 - &GT; https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/executeScript#Return_value