问题标签 [firefox-addon-webextensions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 页面发生动态更改时重新加载 Firefox 插件
我正在尝试使用 WebExtensions 编写我的第一个 Firefox 插件(第一个扩展非常复杂)。我需要处理会话中所有 Google 搜索的结果(会话 = 使用同一 Google 页面的查询)。我有以下代码:
清单.json:
index.js:
它正是我第一次搜索所需的(使用地址栏)。但是,加载项会在我第一次进入 Google 页面时加载,执行它必须执行的操作,然后停止。只有当我刷新页面或从地址栏进行另一个查询时它才会重新加载。
当我使用搜索字段进行另一次搜索并再次进行处理时,我需要找到一种重新加载加载项的方法,但不会丢失以前搜索的工作。我想我必须使用 cookie,但我还没有。
我尝试使用req.addEventListener("load", someFunction)
instead of/besides req.onreadystatechange()
,但并没有解决问题。有任何想法吗?
谢谢!
javascript - 通过 WebExtension 向所有嵌入的 YouTube 视频添加事件监听器
我想实现一个在任何网站上播放任何 HTML5 (YouTube) 视频时都会调用的函数。我尝试过使用 API:
并使用 jQuery:
但是,两者都不起作用。
javascript - 在 chrome 扩展中,如何将跨域消息从父内容脚本发送到特定子 iframe 中的内容脚本
我正在开发一个带有清单的 Chrome 扩展程序,目前可以访问所有主机。后台脚本将内容脚本注入所有帧。加载 DOM 后,首页/框架中的内容脚本开始遍历 DOM 树。当 walker 遇到 iframe 时,它需要向与该 iframe 的窗口(可能是跨域)关联的特定内容脚本发送消息以开始其工作,并在此消息中包含一些序列化数据。父窗口暂停执行并等待子窗口完成它的遍历并发送回消息,表明它与序列化数据一起完成。然后父进程继续其工作。我尝试了两种方法来解决这个问题:
frameElement.contentWindow.postMessage
: 这在大多数情况下都有效,但并非总是如此。有时,与 iframe 窗口关联的内容脚本消息事件侦听器永远不会收到该消息。我无法确认原因,但我认为它是在我的听众呼叫之前附加的听众event.stopImmediatePropagation()
。例如,在雅虎主页 ( https://www.yahoo.com ) 上,当向我的内容脚本发布消息时,与 iframe 源https://s.yimg.com/rq/darla/2-9-关联9/html/r-sf.html,消息永远不会收到。这是一个与广告相关的 iframe。也许阻止消息是故意的。发布消息时没有错误,我使用“*”的 targetOrigin。chrome.runtime.sendMessage
:我可以向后台页面发送消息,但无法弄清楚如何告诉后台页面将消息中继到哪个框架。父窗口内容脚本不知道与它在 DOM walk 中遇到的子框架元素关联的 chrome 扩展 frameId。所以它不能告诉后台页面如何引导消息。
对于第 2 点,我尝试了在 stackoverflow 上找到的两种技术:
- 使用此问题中描述的概念:在父窗口中,确定 iframe 在
window.frames
数组中的位置,并使用此索引将消息发布到背景页面。后台页面将消息发布到消息数据中具有所需索引的所有帧。只有在 window.parent.frames 数组中找到它的窗口对象位置的 iframe 与从消息接收到的索引匹配,才会继续它的 walk。这工作正常,但在异步消息传递过程中容易受到window.frames
数组更改的影响(如果在发送消息后删除 iframe,则索引值可能不再匹配所需的帧)。 - 代替点 1 的索引值,
frameElement.name
在父窗口中使用。使用相同的消息传递技术,将名称发送到子 iframe 以与其window.name
值进行比较。我相信从iframe 元素创建时window.name
获得它的价值。frameElement.name
但是,由于我不控制框架元素的创建,因此 name 属性通常是一个空字符串,并且不能依赖于将 iframe 元素唯一地匹配到它们的窗口。
有没有办法让我可靠地将消息发送到与遍历 DOM 树时发现的 iframe 元素相关联的内容脚本?
google-chrome - 使用 Webextensions API 重定向到代理
如何接受 HTTP 请求并将其重定向到代理(在临时基础上,假设浏览器处于无代理状态)?
例如:我想访问http://www.stackoverflow.com/questions。
就 API 而言,此请求如下所示:
如果我必须向代理发送相同的请求,我需要添加代理授权标头。我还需要将 URL 更改为http://www.myproxy.com。如何指定要访问的网站的 URL?
在实际编码方面:
在 onBeforeRequest callBack- 我通过返回 {redirectUrl: https://www.myproxy.com }来更改 URL
在 onBeforeSendHeaders callBack- 我添加代理身份验证标头。我将 Host 标头保持原样。
我在哪里以及如何提及我需要内容的目标网站的 URL?
firefox-addon - webExtentions - 无法使用 ajax 获取我的 html 模板
此代码适用于 chrome 但不适用于 Firefox
有人知道吗?
先感谢您!
firefox - 定义 Firefox WebExtensions 选项页面时出错
我目前正在使用新的 WebExtensions API 为 Firefox 开发一个相当简单的附加组件。一切都很好,直到我尝试options_ui
在清单文件中定义。设置后,加载扩展会导致以下错误:
id
安装过程中出错:在设置or之前可能无法调用 getURLuuid
。
完整清单:
如果未设置,则不会出现问题options_ui
,并且扩展程序按预期工作,当然除了缺少选项页面。
这个错误的根源可能是什么?为什么它只发生在options_ui
? browser_action.default_popup
也有一个 URL,并且有效。
提前致谢。
javascript - 上下文菜单不起作用 Firefox 附加 WebExtensions
我正在尝试使用 WebExtensions API 将上下文菜单添加到我的 Firefox 插件中。我需要后台脚本来收听单击菜单项并向内容脚本发送消息。这就是我所拥有的:
清单.json
背景-scripts.js
内容脚本.js
正在创建菜单项,但从未显示消息(我正在检查 Web 和浏览器控制台)。由于单击事件不起作用,因此也不会发送消息。
我正在关注MDN 中的这个示例,但它不起作用。它还创建了菜单项,但它们什么都不做,这让我认为 API 中的某些内容发生了变化,MDN 并没有费心更新文档。
有任何想法吗?谢谢。
javascript - 无法使用 var tabs = require("sdk/tabs"); 在 WebExtension 插件中
"sdk/tabs"
似乎无法在我的 Firefox 插件中使用。我想知道怎么了。我的background.js在这部分之后停止处理任何代码:
例如,如果我运行这段代码,控制台将输出“ error1? ”——包括上面的所有内容,但该片段下面没有任何内容。
我已在manifest.json文件中包含"tabs"
权限。我需要包括其他任何东西来使用吗?"sdk/tabs"
firefox - Firefox WebExtension:特定于选项卡的存储
我正在编写一个 Firefox WebExtension,chrome.storage.local
用于保存状态,这是我第一次选择扩展时所做的。
如何将状态限制为特定选项卡?我希望每个选项卡都有自己的数据版本。
谢谢