我有一个扩展程序,可以成功读取当前网页,提取所需数据,并构建要采取的操作列表。
目前,它们会呈现给用户,让他们点击链接来执行它们。这些链接的缺点是,他们第二次点击弹出新标签的链接,终止了扩展程序的弹出窗口,从而结束了脚本执行。我也不希望用户不得不盲目点击,点击,点击 - 我想自动化它。
因此,即使弹出窗口被取消(当然还有用户的全部知识),我还是希望将操作列表移交给可以继续执行的操作。
我已经看过事件和背景页面 - 这些都是正确的方法吗?或者我想做一些不可能的事情?
我尝试创建一个事件页面,然后我读到了为了从内容脚本(popup.js - 我认为这是正确的术语?)到该事件页面进行通信,我需要使用sendMessage() 。但是,尽管在事件页面的脚本中发送了一条消息并且使用了onMessage.addListener,但我只是对提供给sendMessage的函数的响应获取null。事件addListener函数中的警报(相反,事实上它没有触发)证明它永远不会到达那里。我猜这是因为事件页面没有被加载 - 但是当调用sendMessage时不应该这样做吗?我应该使用sendMessage的标签ID版本吗?
所以我的问题是:
事件或背景页面是否是正确的方式来处理即使弹出窗口被解除也可以完成的处理?如果没有,怎么样?
在调用sendMessage时,如何编写事件页面(和/或sendMessage调用)以正确加载它以确保它获取消息?
如果我可以潜入其他几个与链接有关的问题......
只有左键单击它们才能在弹出窗口中工作,尽管它们是完全标准的锚标签。如何让他们响应正常网页中的链接所做的右键点击?
是否可以从锚标记强制在后台加载新标签,这会阻止我的分机的弹出窗口被杀掉?
抱歉这个长度。
答案 0 :(得分:0)
请尽量不要捆绑问题。
1)事件或背景页面是否是正确的方式来处理即使弹出窗口被解除也可以完成的处理?如果没有,怎么样?
是的,背景/事件页面正是为此目的 - 后台处理。
2)当调用sendMessage以确保它获取消息时,我如何编写事件页面(和/或sendMessage调用)以正确加载它?
如果没有您的代码,无法判断您的代码有什么问题(如果您想获得帮助,请提出新问题),但添加了onMessage
的听众应该足够了。
始终加载后台页面,如果空闲,则会卸载事件页面("persistent": false
),但Chrome会记住哪些事件已分配了侦听器,并且如果发生该事件,则会再次调用该页面。
从chrome://extensions/
调试您的背景页可能会有所帮助。
3)只有左键单击它们才能在弹出窗口中工作,尽管它们是完全标准的锚标签。如何让他们响应正常网页中的链接所做的右键点击?
对此没有评论。我有理由相信自定义点击处理程序会右键单击。
4)是否可以从锚标记强制在后台加载新标签,这会阻止我的分机的弹出窗口被杀掉?
是的,如果您不使用<a>
进行导航。您可以在chrome.tabs.create
的点击处理程序中使用active: false
。