我目前正在向Chrome扩展程序添加新手入门页面。在安装时,我会弹出一个与扩展程序捆绑在一起的新HTML页面,这将为他们提供产品介绍并要求他们尝试:
background.js
chrome.runtime.onInstalled.addListener(function(details){
if(details.reason == "install"){
chrome.tabs.create({url: "/onboarding.html"});
};
});
该页面然后告诉他们打开扩展程序,点击它的图标,该图标运行以下内容(目前在普通网页上完美运行):
background.js
chrome.browserAction.onClicked.addListener(function(tab) {
toggle = !toggle;
if(toggle){
chrome.browserAction.setIcon({path:{"16": "icons/icon16c.png", "32": "icons/icon32c.png"}});
chrome.tabs.executeScript({file: "measure.js"});
chrome.tabs.insertCSS({file: "styles.css"});
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
tabId = tabs[0].id;
chrome.tabs.sendMessage(tabId, {"whatToDo": "on"});
console.log("Measure is on tab number: " + tabId);
});
}
else{
chrome.browserAction.setIcon({path:{"16": "icons/icon16.png", "32": "icons/icon32.png"}});
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {"whatToDo": "off"});
});
tabId = "";
}
});
理想情况下,它注入的脚本会在新手页面的html内容上执行扩展功能。用户现在熟悉扩展,可以继续他们的生活。
但是,我在后台页面的控制台中得到了两个错误:
Unchecked runtime.lastError while running tabs.executeScript: Cannot access contents of the page. Extension manifest must request permission to access the respective host.
at chrome-extension://ebaijgpdnadcfcdmcjcpgcgfmddlhfkm/background.js:13:17
和
Unchecked runtime.lastError while running tabs.insertCSS: Cannot access contents of the page. Extension manifest must request permission to access the respective host.
at chrome-extension://ebaijgpdnadcfcdmcjcpgcgfmddlhfkm/background.js:14:17
所以我发现我遇到了这个问题,因为我很顽皮并试图将脚本注入chrome-extension://
页面。这让我觉得很奇怪,因为这是我自己制作的一个页面?
我已经看过其他有相同/类似问题的人,但我希望因为我正在创建此页面而不是要求访问核心Chrome页面,所以可能有更好的解决方案?
我不想要求用户提供一些严格的安装权限,因为我目前只使用activeTab
。我也不想将它们指向一个托管在某个地方的实时网页,将扩展包装起来对我来说更加优雅。
有没有人对我如何能够完成我想要的事情提出任何建议,但采用不同的方式?
谢谢!
更新 提出了这个可能的重复:Chrome extension: create tab then inject content script into it。
它解决了我遇到的问题,但没有以最理想的方式解决。
首选答案 我在这里的首选答案是wOxxOm的评论,它告诉我要解决这个问题。我不应该将脚本注入页面,而应该以传统的方式从页面的HTML链接到它们。
这解决了我的问题。