将焦点放在原始页面标签上,调用了Chrome扩展程序?

时间:2016-05-02 04:23:12

标签: javascript google-chrome-extension

  • 按下chrome扩展工具栏按钮
  • 打开弹出窗口,其中包含按钮,当按下该按钮时,它会将content.js文件注入当前页面DOM
  • 页面中的content.js构建了一个DIV模态窗口。在该模式中,按下按钮时会向chrome extensions background.js文件发送消息,告诉它构建整页截图图像。
  • 然后它还隐藏了该页面display: none;
  • 上的视图的模态DIV
  • 因为它是一个整页高度的屏幕截图,所以它必须在content.jsbackground.js脚本之间来回发送消息,以便它能够逐帧捕捉视图端口的图像建立一个全高度的图像。
  • 当图像构建完成后,我的background.js脚本会打开一个新文件edit.html,这是我的扩展程序中的自定义页面,其中包含一个完整的图像注释库来编辑图像。
  • edit.html文件开始,当图像完成编辑时,它使用AJAX使用AJAX将新图像上传到我的远程服务器,并返回新图像上传的URL。
  • 这是我需要关闭edit.html文件/标签并使用新图片网址发送回原始网页content.js的消息,还有一条消息告诉它取消隐藏该页面上的模态窗口,并将新图像URL插入该模式窗口中的文本输入字段。

我已经完成了所有这些工作,直到我需要:

  • 关闭edit.html文件/标签
  • 同时将焦点带回我们开始的原始页面标签
  • 还会向原始页面content.js脚本发送一条消息,其中可能包含显示模态窗口的消息,并包含我们构建,编辑,然后上传到远程服务器的屏幕截图的图像URL。

1)
有关如何关闭edit.html标签并将焦点恢复到原始标签页的任何帮助吗?

我相信edit.html页面必须向background.js文件发送消息以关闭自身,然后该background.js文件还可以向原始标签content.js文件发送消息并带来焦点再来一次。只是不确定如何做这部分。主要知道哪个标签是原始标签。

1 个答案:

答案 0 :(得分:2)

如果内容脚本使用chrome.runtime.connect()将消息发送到后台页面,则后台页面可以从port.sender.tab.id获取选项卡ID,其中“port”是端口对象的名称。后台页面可以将选项卡ID传递给新的edit.html页面,方法是将其放在用于打开新选项卡的URL的搜索字符串中,例如。 chrome.tabs.create({url: "edit.html?23"})。由于edit.html页面是您的扩展程序的一部分,因此可以使用chrome.tabs.update()来关注原始页面,并且可以使用chrome.tabs.getCurrent()来获取自己的标签ID,然后使用{{1 }}。它可以使用chrome.tabs.remove()或使用chrome.tabs.sendMessage()来访问后台页面的窗口对象,从而使其能够使用后台页面和后台页面之间的现有消息端口,从而向内容脚本发送消息。内容脚本。