sha*_*aka 5 javascript google-chrome-extension
我有一个 Chrome 扩展,它从后台脚本调用内容脚本以将 HTML 插入网页。
当我调用内容脚本 (inject.js) 时,我想从内容脚本 (eventpage.js) 传递一些参数,但这样做时遇到一些问题。我也不想使用利用 chrome.storage 或 localstorage 的解决方案。
Manifest.json(相关部分):
{
"manifest_version": 2,
"content_scripts": [
{
"matches": ["http://*/*"],
"js": ["inject.js"]
}
],
...
"background": {
"scripts": ["eventpage.js",...],
"persistent": false
},
}
Run Code Online (Sandbox Code Playgroud)
Eventpage.js(背景):
// Want to add the parameter here
chrome.tabs.executeScript(tabId, {
file: 'inject.js'
});
Run Code Online (Sandbox Code Playgroud)
Inject.js(内容):
(function() {
// Want to retrieve the parameter passed from eventpage.js here
})();
Run Code Online (Sandbox Code Playgroud)
小智 0
您想要使用的解决方案有时很方便,但它不称为内容脚本,它用于在页面上插入 HTML 的不同情况。您正尝试将一段 JS 直接注入到网站中,而您指定了ject.js 文件作为内容脚本。
WebExtensions 标准中的内容脚本意味着该脚本可以访问网页的 HTML(减去 iframe 等一些限制)并可以对其进行修改。
考虑将后台脚本的内容更改为:
chrome.tabs.query({active:true, lastFocusedWindow: true}, function(tabs){
if (tabs.length > 0) {
chrome.tabs.sendMessage(tabs[0].id, {
type:"message-type",
param: 'param'
});
}});
Run Code Online (Sandbox Code Playgroud)
并在内容脚本中添加从后台检索的消息的侦听器
chrome.extension.onMessage.addListener(callback);
Run Code Online (Sandbox Code Playgroud)
其中callback变量应该是您想要在inject.js 文件中运行的函数。该函数可以在其签名中获取一个参数,并且当它执行时,它包含作为chrome.tabs.sendMessage函数的第二个参数传递的 JS 对象。
在这种情况下,它将是
var callback = function(data) {
// here in data.param you have your parameter
}
Run Code Online (Sandbox Code Playgroud)
另外,如果您确实需要使用代码注入,那么您必须做两件事:
从 content_script 中删除inject.js部分manifest.json并将其添加到web_accessible_resources部分中。
阅读有关注入代码的所有必要信息将参数传递给使用 chrome.tabs.executeScript() 注入的内容脚本
| 归档时间: |
|
| 查看次数: |
3893 次 |
| 最近记录: |