首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在火狐WebExtensions中从背景到侧边栏脚本进行通信?(反之亦然)

如何在火狐WebExtensions中从背景到侧边栏脚本进行通信?(反之亦然)
EN

Stack Overflow用户
提问于 2017-07-15 23:12:31
回答 1查看 1.3K关注 0票数 1

我正在将我的扩展从SDK迁移到WebExtensions,并且找不到后台脚本和侧栏之间的通信方式。这个想法是在用户点击上下文菜单时传递文本、高光和一些额外的信息。我需要在“所选文本”输入中复制此选择,但我无法从脚本中操作侧栏的DOM .:(

代码语言:javascript
运行
复制
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")所具有的更多的通信。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-18 05:59:04

扩展的背景、内容、侧边栏等脚本可以使用runtime.sendMessage()runtime.onMessage.addListener()相互通信

AFAIK,目前在侧栏和内容DOM之间没有任何直接的联系。

您可以使用tabs.query()获取Active Tab (它是可视选项卡)或任何其他选项卡。

代码语言:javascript
运行
复制
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);

代码语言:javascript
运行
复制
chrome.tabs.query({currentWindow: true, active: true}, function (tabs) {
  // tabs[0] is the active tab
});

然后,您可以将tabs.executeScript()与从tabs.query()获得的tabId (即tabs[0].id)一起使用,将JavaScript代码注入页面( DOM )并与其DOM交互。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45123553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档