我在扩建Chrome扩展程序。
在这部分代码中,我尝试在加载的页面中查找段落,对于具有id加载和详细信息的div中的每个段落,我搜索findCheckedFact的值是否在该段落中,如果是的话,我要将该文本放在跨度内带有红色的

findCheckedFact是一个字符串。在+'console.log("Print:", str_p, " Fact:", findCheckedFact);'中,此处定义了段落内的文本,但未定义参数findCheckedFact,因此无法传递它吗?
我尝试调用此功能findTextInsideParagraphs("test");

function findTextInsideParagraphs(findCheckedFact){
        chrome.tabs.executeScript({file: "js/jquery-1.12.0.min.js"}, function() {
            chrome.tabs.executeScript({"code":
                '(function(findCheckedFact){'
                    +'$("#lead, #detail").find("p").each(function() {'
                            +'var str_p = $(this).text();'
                            +'console.log("Print:", str_p, " Fact:", findCheckedFact);'
                            +'if (str_p.indexOf( findCheckedFact) >= 0) {'
                                +'console.log("Yes kest");'
                                +'$(this).html($(this).html().replace(findCheckedFact, "<span class=\'red\'> $& </span>"));'
                            +'}'
                    +'});'
                 +'}(' + JSON.stringify("Fact: " , findCheckedFact) + '));'
             });
        });

}


我试过调用findTextInsideParagraphs(“ test”);
在manifest.json内部,我确实添加了一切以使其正常工作:

  "content_scripts": [
    {
      "matches": [
        "<all_urls>",
        "http://*/*",
        "https://*/*"
      ],
      "css": [
        "custom-css.css"
      ],
       "js": [
        "js/jquery-1.12.0.min.js"
      ],
      "run_at": "document_start"
    }],
  "background": {
    "persistent": false,
    "scripts": [
      "js/jquery-1.12.0.min.js",
      "background.js",
      "popup.js",
      "blic-fact-checker.js"
    ],
    "css":["custom-css.css"]
  },
  "permissions": [
    "background",
    "notifications",
    "contextMenus",
    "storage",
    "tabs",
    "activeTab",
    "http://localhost:5000/*",
    "chrome-extension://genmdmadineagnhncmefadakpchajbkj/blic-fact-checker.js",
    "chrome-devtools://devtools/bundled/inspector.html?&remoteBase=https://chrome-devtools-frontend.appspot.com/serve_file/@202161/&dockSide=undocked",
    "http://*/*",
    "https://*/*",
    "<all_urls>"
  ],


有人可以帮我这个忙,真的我找不到发生了什么事吗?

最佳答案

首先,阅读this explanation of different kinds of javascript code in Chrome extensions

如您所见,executeScript中的代码是内容脚本,它不能直接访问后台和其他适当的扩展页面中的代码。您有3个主要选择:

1)使用FindCheckedFactsendMessageport.postMessage发送到内容脚本。当然,在内容脚本中,您必须为其建立侦听器,然后将实际的代码放入这些侦听器中。

2)将变量保存在本地或同步存储中,将executeScript放入回调中,然后从内容脚本中读取它们。如果有时需要重新读取它,请在内容脚本中为存储更改设置一个侦听器。

这些解决方案可与.js文件中的内容脚本和内联内容脚本一起使用。但是,由于您选择了内联,并且只需要以一种方式发送值,则可以

3)只需将您的FindCheckedFact字符串化(使用JSON.stringify或toString),并使用+插入其值:

chrome.tabs.executeScript({"code":
            '(function('+strFindCheckedFact+'){'


等等

关于javascript - 在chrome.tabs.executeScript中的javascript函数中传递参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36683077/

10-10 13:05