问题标签 [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.

0 投票
1 回答
110 浏览

javascript - 页面发生动态更改时重新加载 Firefox 插件

我正在尝试使用 WebExtensions 编写我的第一个 Firefox 插件(第一个扩展非常复杂)。我需要处理会话中所有 Google 搜索的结果(会话 = 使用同一 Google 页面的查询)。我有以下代码:

清单.json:

index.js:

它正是我第一次搜索所需的(使用地址栏)。但是,加载项会在我第一次进入 Google 页面时加载,执行它必须执行的操作,然后停止。只有当我刷新页面或从地址栏进行另一个查询时它才会重新加载。

当我使用搜索字段进行另一次搜索并再次进行处理时,我需要找到一种重新加载加载项的方法,但不会丢失以前搜索的工作。我想我必须使用 cookie,但我还没有。

我尝试使用req.addEventListener("load", someFunction)instead of/besides req.onreadystatechange(),但并没有解决问题。有任何想法吗?

谢谢!

0 投票
2 回答
1319 浏览

javascript - 通过 WebExtension 向所有嵌入的 YouTube 视频添加事件监听器

我想实现一个在任何网站上播放任何 HTML5 (YouTube) 视频时都会调用的函数。我尝试过使用 API:

并使用 jQuery:

但是,两者都不起作用。

0 投票
1 回答
2739 浏览

javascript - 在 chrome 扩展中,如何将跨域消息从父内容脚本发送到特定子 iframe 中的内容脚本

我正在开发一个带有清单的 Chrome 扩展程序,目前可以访问所有主机。后台脚本将内容脚本注入所有帧。加载 DOM 后,首页/框架中的内容脚本开始遍历 DOM 树。当 walker 遇到 iframe 时,它​​需要向与该 iframe 的窗口(可能是跨域)关联的特定内容脚本发送消息以开始其工作,并在此消息中包含一些序列化数据。父窗口暂停执行并等待子窗口完成它的遍历并发送回消息,表明它与序列化数据一起完成。然后父进程继续其工作。我尝试了两种方法来解决这个问题:

  1. 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。
  2. chrome.runtime.sendMessage:我可以向后台页面发送消息,但无法弄清楚如何告诉后台页面将消息中继到哪个框架。父窗口内容脚本不知道与它在 DOM walk 中遇到的子框架元素关联的 chrome 扩展 frameId。所以它不能告诉后台页面如何引导消息。

对于第 2 点,我尝试了在 stackoverflow 上找到的两种技术:

  1. 使用此问题中描述的概念:在父窗口中,确定 iframe 在window.frames数组中的位置,并使用此索引将消息发布到背景页面。后台页面将消息发布到消息数据中具有所需索引的所有帧。只有在 window.parent.frames 数组中找到它的窗口对象位置的 iframe 与从消息接收到的索引匹配,才会继续它的 walk。这工作正常,但在异步消息传递过程中容易受到window.frames数组更改的影响(如果在发送消息后删除 iframe,则索引值可能不再匹配所需的帧)。
  2. 代替点 1 的索引值,frameElement.name在父窗口中使用。使用相同的消息传递技术,将名称发送到子 iframe 以与其window.name值进行比较。我相信从iframe 元素创建时window.name获得它的价值。frameElement.name但是,由于我不控制框架元素的创建,因此 name 属性通常是一个空字符串,并且不能依赖于将 iframe 元素唯一地匹配到它们的窗口。

有没有办法让我可靠地将消息发送到与遍历 DOM 树时发现的 iframe 元素相关联的内容脚本?

0 投票
1 回答
422 浏览

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?

0 投票
0 回答
17 浏览

firefox-addon - webExtentions - 无法使用 ajax 获取我的 html 模板

此代码适用于 chrome 但不适用于 Firefox

有人知道吗?

先感谢您!

0 投票
1 回答
355 浏览

google-chrome-extension - 如何在启动浏览器时强制 WebExtension 更新?

如何在启动浏览器时强制(或安装请求)WebExtension 更新?

在 Firefox 中,我需要单击此选项:

火狐

在 Opera 中,我需要单击此按钮:

在此处输入图像描述

我想知道的是,如果有任何更新或配置“manifest.json”来执行此操作,是否有任何方法可以使用 API 检查。

我需要为 Opera、Firefox 和 Chrome 添加自动更新。

我当前的 manifest.json (Firefox):

0 投票
1 回答
331 浏览

firefox - 定义 Firefox WebExtensions 选项页面时出错

我目前正在使用新的 WebExtensions API 为 Firefox 开发一个相当简单的附加组件。一切都很好,直到我尝试options_ui在清单文件中定义。设置后,加载扩展会导致以下错误:

id安装过程中出错:在设置or之前可能无法调用 getURL uuid

完整清单:

如果未设置,则不会出现问题options_ui,并且扩展程序按预期工作,当然除了缺少选项页面。

这个错误的根源可能是什么?为什么它只发生在options_ui? browser_action.default_popup也有一个 URL,并且有效。

提前致谢。

0 投票
1 回答
1329 浏览

javascript - 上下文菜单不起作用 Firefox 附加 WebExtensions

我正在尝试使用 WebExtensions API 将上下文菜单添加到我的 Firefox 插件中。我需要后台脚本来收听单击菜单项并向内容脚本发送消息。这就是我所拥有的:

清单.json

背景-scripts.js

内容脚本.js

正在创建菜单项,但从未显示消息(我正在检查 Web 和浏览器控制台)。由于单击事件不起作用,因此也不会发送消息。

我正在关注MDN 中的这个示例,但它不起作用。它还创建了菜单项,但它们什么都不做,这让我认为 API 中的某些内容发生了变化,MDN 并没有费心更新文档。

有任何想法吗?谢谢。

0 投票
1 回答
297 浏览

javascript - 无法使用 var tabs = require("sdk/tabs"); 在 WebExtension 插件中

"sdk/tabs"似乎无法在我的 Firefox 插件中使用。我想知道怎么了。我的background.js在这部分之后停止处理任何代码:

例如,如果我运行这段代码,控制台将输出“ error1? ”——包括上面的所有内容,但该片段下面没有任何内容。

我已在manifest.json文件中包含"tabs"权限。我需要包括其他任何东西来使用吗?"sdk/tabs"

0 投票
1 回答
296 浏览

firefox - Firefox WebExtension:特定于选项卡的存储

我正在编写一个 Firefox WebExtension,chrome.storage.local用于保存状态,这是我第一次选择扩展时所做的。

如何将状态限制为特定选项卡?我希望每个选项卡都有自己的数据版本。

谢谢