google-chrome-extension - 我的 chrome 扩展程序无法在 Edge 上运行
问题描述
我有一段代码在 chrome 上运行良好。我做了这里提到的以下步骤。我能够正确加载它,但代码无法正常运行。在后台控制台中,仅打印 url,没有其他控制台或警报工作。请任何帮助将不胜感激!请
window.onload = function() {
console.log("blah1");
var port = browser.runtime.connect({name: "knockknock"});
port.postMessage({request: "sendData"});
port.onMessage.addListener(function(msg) {
console.log("blah2");
if(msg != null){
}
});
}
var sendData = null;
var url = null;
browser.webRequest.onBeforeRequest.addListener(function(details) {
if(details != null && sendData == null && details.url.includes("www")){
console.log(details.url);
sendData = details.url;
}
},
{urls: ["<all_urls>"]},
["blocking", "requestBody"]
);
browser.runtime.onConnect.addListener(function(port) {
console.log("inside addListener")
port.onMessage.addListener(function(msg) {
if (msg.request == "sendData"){
console.log("sendData : ", sendData);
port.postMessage(sendData);
}else if (msg.answer == null){
sendData = null;
}
});
});
我的清单文件
{
"manifest_version": 2,
"name": "test",
"version": "1.0.0",
"author": "medha",
"icons": {
"48": "esso.png"
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
],
"background": {
"scripts": ["background.js"]
},
"permissions": [ "webRequest", "webRequestBlocking", "webNavigation", "tabs", "<all_urls>", "storage"],
"-ms-preload": {
"backgroundScript": "backgroundScriptsAPIBridge.js",
"contentScript": "contentScriptsAPIBridge.js"
}
}
解决方案
我测试并发现如果我们删除,window.onload
那么扩展将在 Edge Legacy 中运行良好。它将打印所有控制台。
您可以将 content.script 设置为运行在document_idle
. 它等于window.onload
并且您不需要监听该window.onload
事件。更详细的信息,您可以参考这篇文章。
我的manifest.json如下所示:
{
"manifest_version": 2,
"name": "test",
"version": "1.0.0",
"author": "medha",
"icons": {
"48": "esso.png"
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"run_at": "document_idle",
"js": ["content.js"]
}
],
"background": {
"scripts": ["background.js"],
"persistent": true
},
"permissions": [ "webRequest", "webRequestBlocking", "webNavigation", "tabs", "<all_urls>", "storage"],
"-ms-preload": {
"backgroundScript": "backgroundScriptsAPIBridge.js",
"contentScript": "contentScriptsAPIBridge.js"
}
}
推荐阅读
- botframework - 如何将机器人安装到微软团队(nodejs)
- mobile - 如何使用 Appium 自动化已安装的 ios 应用程序
- android - 如何在editText中输入小数?
- php - 作为对象标准类从 Web 服务中单独接收
- android - 添加 google_maps_flutter 后“flutter build apk”命令失败
- javascript - javaScript中setter的优点是什么
- wso2 - EI 中的错误 - 系统可能不稳定:HTTPS ConnectingIOReactor 遇到运行时异常
- c# - 在方法完成后将事件添加到另一个类
- javascript - 样式绑定使应用程序不再出现在 Vue 中
- php - 如何从 SQL 返回的结果中选择结果