在我的 Chrome 扩展程序的后台页面中,我需要执行以下操作:
- 创建一个带有 html 页面的选项卡,该页面位于我的扩展文件夹中或由后台页面动态生成;
- 加载新选项卡后,在其中注入内容脚本以使用消息传递;
- 注入脚本后,向新选项卡发送一条带有一些数据的消息。
这总是会变成错误:
tabs.executeScript:无法访问 url“”的内容。扩展清单必须请求访问此主机的权限。
或者,如果页面或脚本存储在我的扩展文件夹中的 .html 和 .js 专用文件中:
tabs.executeScript:无法访问 url“chrome-extension://ehdjfh.../page.html”的内容。扩展清单必须请求访问此主机的权限。
执行时会产生错误chrome.tabs.executeScript()
并阻止内容脚本注入。(我需要这个结构将一些大数据传递给选项卡,如果直接作为字符串传递到编码的 html url 中,这些数据将被截断)
这是一个代码示例,可用于将行为测试到工作扩展中,只需复制粘贴并在 Chrome 中加载扩展:
背景.js
chrome.browserAction.onClicked.addListener(function() {
var getSampleHTML = function() {
return 'javascript:\'<!doctype html><html>' +
'<head></head>' +
'<body>' +
'<p id="myId">page created...</p>' +
'</body>' +
'</html>\'';
};
// create a new tab with an html page that resides in extension domain:
chrome.tabs.create({'url': getSampleHTML(), 'active': false}, function(tab){
var getSampleScript = function() {
return 'chrome.extension.onRequest.addListener(' +
'function(request, sender, sendResponse) {' +
'if(request.action == "print_data" && sender.tab.id == ' + tab.id + '){' +
'var p = document.getElementById("myId");' +
'p += "<br>data received: " + request.data;' +
'}' +
'});'
'document.getElementById("myId").innerHTML += "<br>content-script loaded...";'
};
// inject the content-script in the page created:
chrome.tabs.executeScript(tab.id, {code: getSampleScript()}, function(){
// send the data to the content-script:
chrome.tabs.sendRequest(tab.id, {action: "print_data",
data: "some long data"});
});
});
});
清单.json
{
"name": "ContentScript Injection Sample",
"description": "",
"version": "0.1",
"permissions": ["tabs"],
"background": {
"persistent": false,
"scripts": ["background.js"]
},
"browser_action": {
"default_title": "open a new tab and inject contentscript"
},
"manifest_version": 2
}