我创建了使用Chrome Extension API的Firefox扩展程序.
但Firefox需要application
密钥manifest.json
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json
如果我为谷歌浏览器加载相同的扩展程序,Chrome会警告:
There were warnings when trying to install this extension:
Unrecognized manifest key 'applications'.
Run Code Online (Sandbox Code Playgroud)
虽然扩展程序有效,但我不确定是否可以使用此清单文件将Firefox Web扩展程序发送到Google Chrome Store.
我可以为Google Chrome创建另一个项目,但我希望保留一个可以同时适用于Firefox和Google Chrome的文件夹,而不会发出任何警告.
我如何在保持Firefox要求的同时修复此警告?
firefox google-chrome google-chrome-extension chrome-web-store firefox-addon-webextensions
我正在尝试将后台脚本中的变量发送到与HTML页面关联的内容脚本.内容脚本使用从后台脚本接收的变量更新HTML内容.
问题是我收到此错误消息:
Error: Could not establish connection. Receiving end does not exist.
Run Code Online (Sandbox Code Playgroud)
后台脚本main.js
:
var target = "<all_urls>";
function logError(responseDetails) {
errorTab = responseDetails.tabId;
console.log("Error tab: "+errorTab);
errorURL = responseDetails.url;
console.log("Error URL: "+errorURL);
//send errorURL variable to content script
var sending = browser.tabs.sendMessage(errorTab, {url: errorURL})
.then(response => {
console.log("Message from the content script:");
console.log(response.response);
}).catch(onError);
//direct to HTML page
browser.tabs.update(errorTab,{url: "data/error.html"});
}//end function
browser.webRequest.onErrorOccurred.addListener(
logError,
{urls: [target],
types: ["main_frame"]}
);
Run Code Online (Sandbox Code Playgroud)
该error.html
方法是:
<html>
<head>
<meta charset="UTF-8">
</head>
<body> …
Run Code Online (Sandbox Code Playgroud) javascript firefox firefox-addon firefox-addon-webextensions
我的网络扩展程序适用于Chromium浏览器,Firefox,Edge,但据我所知 - 现在只能用Safari浏览器打开相同的代码库是不可能的?
在我的浏览器扩展的开发过程中,我遇到了这个错误.可能是什么?我在Firefox的源代码中发现了这条消息:
getContextById(childId) {
let context = this.proxyContexts.get(childId);
if (!context) {
let error = new Error("WebExtension context not found!");
Cu.reportError(error);
throw error;
}
return context;
}
Run Code Online (Sandbox Code Playgroud)
但仍然不知道我的扩展程序有什么不好 - 它在谷歌浏览器中也照常运行.
我正在尝试使用WebExtensions结构为firefox编写一个小插件.
这个附加组件应该通过它的绝对路径读取本地文件内容:
"/ home/saba/desktop/test.txt"
的manifest.json
{
"manifest_version": 2,
"name": "Test - load files",
"version": "0.0.1",
"description": "Test - load files",
"permissions": [ "<all_urls>" ],
"background": {
"scripts": [ "main.js" ]
}
}
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止尝试过的(在main.js中):
XMLHttpRequest
function readFileAjax(_path){
var xhr = new XMLHttpRequest();
xhr.onloadend = function(event) {
console.log("onloadend", this);
};
xhr.overrideMimeType("text/plain");
xhr.open("GET", "file:///"+_path);
xhr.send();
}
readFileAjax("/home/saba/desktop/test.txt");
Run Code Online (Sandbox Code Playgroud)
失败.我无法弄清楚为什么它总是返回一个空响应
(test.txt包含"test",路径是正确的)
onloadend XMLHttpRequest {
onreadystatechange: null,
readyState: 4,
timeout: 0,
withCredentials: false,
upload: XMLHttpRequestUpload,
responseURL: "",
status: 0,
statusText: "",
responseType: "", …
Run Code Online (Sandbox Code Playgroud) 我在过去几周一直在编写一些浏览器扩展,直到今天我还认为Firefox的WebExtension应该在Chrome中自动运行.所以我试着根据Mozilla的例子编写我的代码.
但是今天我意识到Chrome扩展程序的API文档中没有提到Promises.
我在所有扩展程序的代码中都严格使用了Promise.
所以现在我的问题是,我的代码会在Chrome中运行吗?或者,如果我var browser = chrome
在最顶层添加声明,它会起作用吗?
或者Chrome根本不支持API上的Promise?
如果Chrome尚未支持API函数的Promises,它将来是否会支持它们?
注意,我知道这个项目:https://github.com/mozilla/webextension-polyfill
但是我不愿意经历在任何地方包含该库的麻烦.此外,它有令人讨厌的错误.
除此之外,我没有Chrome或Chromium,出于隐私和安全原因,我无法安装它们.
javascript google-chrome-extension firefox-addon-webextensions
我打算在打开该选项卡时在新选项卡中执行脚本.
在我的后台脚本中,我有:
var listener = function (tab) {
browser.tabs.executeScript(null, { file: "content_scripts/contentScript.js" });
}
browser.tabs.onCreated.addListener(listener);
Run Code Online (Sandbox Code Playgroud)
在contentScript.js中:
function foo() {
console.log("Executed");
}
foo();
Run Code Online (Sandbox Code Playgroud)
从这里我得到以下错误:
Error: Permission denied to access property "chrome"
Run Code Online (Sandbox Code Playgroud)
如果我只是执行代码而不是调用js脚本,ex:
browser.tabs.executeScript(null, { code: "console.log("Executed") });
Run Code Online (Sandbox Code Playgroud)
这不会导致错误.知道是什么导致了这个吗?
我正在将Chrome扩展程序移植到Firefox.
根据MDN,有一个browser.tabs API应该由chrome支持.
但是browser
Chrome不是稳定的对象.同时chrome.tabs
在Firefox中工作得很好.
它是安全的替代browser
与chrome
阅读MDN文档时?写文档的原因是什么browser
?是否有计划的变化?
javascript google-chrome-extension firefox-addon-webextensions
我想知道如何在Firefox WebExtension中访问和修改JavaScript中跨域iframe的内容.我理解普通JavaScript的局限性,修改跨域iframe会是一个XSS漏洞,但我相信在WebExtension中有一些我无法找到的方法.我相信这是因为旧版扩展清单具有允许权限部分中的跨域内容的选项.
查看旧版FireFox扩展的旧代码时,似乎有以下方式为某些网站提供跨域内容选项.虽然对于新的FireFox WebExtension,但这不是文档中列出的功能.
"cross-domain-content": ["https://www.example.com"]
Run Code Online (Sandbox Code Playgroud)
这是我的manifest.json
档案.
{
"manifest_version": 2,
"name": "Test Extension",
"version": "1.0",
"content_scripts": [
{
"matches": ["*://*/*"],
"all_frames": true,
"js": [
"js/main.js"
]
}
],
"permissions": [
"*://*/*",
"<all_urls>",
]
}
Run Code Online (Sandbox Code Playgroud)
这是我的main.js
档案.
// Code is being run within an iframe ("all_frames": true)
if (window != window.top) {
// Attempt to log the source of the parent iframe
// If cross domain, met throws - Error: Permission denied to access property "frameElement"
console.log(window.parent.frameElement.src);
} …
Run Code Online (Sandbox Code Playgroud) javascript iframe firefox jquery firefox-addon-webextensions
注意 - 这个问题是基于这个问题(虽然没有必要阅读上一个问题):How to set value of textarea in different HTML file?
我有以下代码,它应该将一个值添加到 firefox/chrome 的本地存储中,然后更改扩展程序的 UI(代码将根据使用的浏览器略有不同,截至目前,该代码用于Firefox 中的扩展):
function createSummaryBox(summary) {
console.log("Setting textarea content to: " + summary);
const currentSummary = {
currentSummary: summary
}
browser.storage.local.set(currentSummary);
window.location.href = '../summary_page/summary_page.html';
}
Run Code Online (Sandbox Code Playgroud)
但是,每当调用此函数时,我都会收到以下错误:
参考错误:browser.storage 未定义
我该如何解决这个错误?我通读了关于这种方法的 MDN 文档,所以我不确定我错过了什么。
javascript local-storage google-chrome-extension firefox-addon-webextensions