- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在将扩展从 SDK 迁移到 WebExtensions,但找不到后台脚本和侧边栏之间的通信方式。这个想法是在用户单击上下文菜单时传递用户突出显示的文本和一些额外信息。我需要在“selected-text”输入中复制此选择,但我无法从脚本中操作侧边栏的 DOM...: (
browser.contextMenus.create({
id: "save-highlighted-data",
title: browser.i18n.getMessage("save-data"),
contexts: ["all"],
onclick: function(info,tab){
//I got the highlighted data
console.log("Selected text: " + info.selectionText);
browser.sidebarAction.setPanel({
panel: browser.extension.getURL("/sidebar/annotation.html")
}).then(function(){
//In this context, "this" = the chrome window. But I can not change the document
// of the sidebar
//console.log("window", this.document.querySelector("#selected-text"));
});
},
command: "_execute_sidebar_action" //This toggles the sidebar
});
有什么想法吗?我检查了 GitHub 存储库中的侧边栏示例,但它们只是打开一个侧边栏,没有比侧边栏切换操作更多的通信 ( "_execute_sidebar_action"
)
最佳答案
扩展程序的背景、内容、侧边栏等脚本可以使用 runtime.sendMessage() 相互通信和 runtime.onMessage.addListener()
据我所知,目前侧边栏和内容 DOM 之间没有任何直接联系。
您可以使用tabs.query()获取事件选项卡(可见选项卡)或任何其他选项卡
function logTabs(tabs) {
for (let tab of tabs) {
// tab.url requires the `tabs` permission
console.log(tab.url);
}
}
function onError(error) {
console.log(`Error: ${error}`);
}
var querying = browser.tabs.query({currentWindow: true, active: true});
querying.then(logTabs, onError);
或者
chrome.tabs.query({currentWindow: true, active: true}, function (tabs) {
// tabs[0] is the active tab
});
然后您可以使用 tabs.executeScript()使用从 tabs.query()
获得的 tabId (即 tabs[0].id
)将 JavaScript 代码注入(inject)页面(DOM )并与其 DOM 交互。
关于javascript - 如何在 Firefox WebExtensions 中从后台与侧边栏脚本进行通信? (或相反亦然),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45123553/
我正在将旧版 Firefox 扩展移植到 WebExtensions。我想在运行时知道扩展本身的版本号。现在我正在做: let extensionVersion = (function() { v
很多时候我都遇到过这个问题,当代码将生成异常(例如未在对象中定义的方法)时,它不会显示在 Firefox 控制台中。 Firefox 会简单地跳过那部分代码。 无法弄清楚问题后,我需要使用 Chrom
我正在尝试让 Google Chrome 扩展程序作为 Firefox Webextension 运行。我原来的问题是弹出窗口没有高度。除此之外,我一生都无法弄清楚如何检查弹出窗口的 DOM。 顺便说
我正在尝试使用 Firefox 45.0.1 移植以编程方式创建文件并将文件下载到 Firefox WebExtension 的 Chrome 扩展程序。 这是Javascript代码: text
我一直在尝试通过阅读以下文档来了解如何使用 WebExtension Page Actions: https://developer.mozilla.org/en-US/Add-ons/WebExte
我正在使用现代浏览器通用 WebExtensions 框架编写浏览器扩展。 我试图弄清楚,如何获得(读取)访问权限或使用稳定的 WebRequest API 的常规服务器发送的 http 响应数据的副
尝试在 WebExtension 中使用带有源映射的库时,遇到此错误。 Source map error: TypeError: NetworkError when attempting to fet
我正在将 Chrome 扩展移植到 Firefox WebExtensions。在 Chrome 上一切正常。 我在 Firefox 上试过这些: 1. 修改我的扩展,使其与 Firefox WebE
所以,我按照这里的教程进行操作:https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_We
我正在更新旧的扩展,从旧的 XUL 代码传递到 html/css“chrome”代码。 我的 .json 文件中的“options_ui”标签有问题...如果我使用当前的 firefox 版本 (46
我正在处理弹出窗口、内容脚本和后台脚本的组合。不幸的是,我在其中选择的任何沟通都未能达到我想要的结果。 我需要在浏览器菜单中开发带有图标/弹出窗口的网络扩展。单击后,它将打开专用菜单,其中包含弹出窗口
我正在尝试了解使用浏览器扩展 storage 的安全隐患。当我阅读 WebExtensions storage documentation 时,有几件事我不清楚。 . 文档中说: Values are
看来 Nativemessaging 的协议(protocol)意味着 native 应用程序通过阻止先读后写循环与扩展进行通信。 首先,这是正确的吗? 如果是这样,那么就很难在双方之间建立双向异步通
如何配置我的自分发 firefox webExtension 以自动更新,我已经尝试关注 MDN update doc但是还是无法更新。 我的网络扩展托管在一个子域名上,例如 "https://fil
WebExtensions API 是否允许更改浏览器的窗口标题? 例如。更改“WebExtensions - 堆栈溢出 - Mozilla Firefox” 到“浏览器 - 窗口 1” 或“浏览器
我是编写附加组件的新手。我试图让一个函数在按下按钮后运行 X 分钟。我正在关注this MDN reference ,并与 this example addon 进行比较,但看不到我的错误。 到目前为
我最近开始使用 FireFox 的 WebExtensions 库,因为旧版扩展已通过 Quantum 更新删除。 我的问题是我需要从上下文菜单将文件保存到绝对路径,但是 FF 的 downloads
我正在尝试开发一个扩展程序,以便在 Mac 上的 FirefoxDeveloperEdition(不需要签名)上运行。 我遵循了“您的第一个 WebExtension”指南,并且在使用“加载临时附加组
如何对网络扩展进行单元测试? 对于较旧的 Firefox 扩展,已弃用的 jpm 工具有一个 jpm test 命令,该命令对从 .js 导出的方法运行单元测试文件。 web-ext 这无论如何都可能
我阅读了有关如何获取对书签树的引用并在其中导航的 MDN 文档。但是我怎么知道哪个文件夹代表书签工具栏呢?此工具栏的名称因地区而异。我不确定是否仍允许用户为此选择任意文件夹,但这在几年前是可能的。 我
我是一名优秀的程序员,十分优秀!