我在扩建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)使用FindCheckedFact
或sendMessage
将port.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/