我正在尝试构建一个Firefox Web扩展程序,该扩展程序将允许我自动执行一些任务。对于从侧边栏加载的文本文件中的每个数字,这些任务是转到特定的网站,搜索该数字,跟随第一个链接,跟随另一个链接并转到最后一页,同时获取一些数据马路。 内容和侧边栏脚本之间的通信是通过消息传递完成的。我注入了脚本,向内容脚本发送了一条消息,它更改了页面位置,然后将消息发送回了侧边栏脚本。
在收到此消息后,它会在发送触发执行的消息之前,重新注入内容脚本(在页面位置更改期间被丢弃的内容脚本)。
我的问题是有时我会收到错误消息
无法建立连接。接收端不存在
我怀疑这是由于页面加载和脚本重新注入之间的错误时机造成的:内容脚本可能在页面重新加载之前被重新注入,并被丢弃。
如何及时插入脚本?
我曾尝试在将消息从面板发送到内容之前应用超时,但是在某些情况下无济于事(例如,当互联网连接出现故障或非常缓慢时)。
代码示例如下所示,内容脚本中的事件侦听器根据对象消息的“ step”成员选择功能
panel.js (background):
function fromEspaceNet(number) {
browser.tabs.executeScript({
file: '/content-script/content-script.js',
runAt : 'document_start'
}).then(sendMessage({num: number, step: 'search'}))
.catch(reportError);
return;
}
function sendMessage(content) {
console.log(content);
setTimeout(function(){
const gettingActiveTab = browser.tabs.query({active: true, currentWindow: true});
gettingActiveTab.then((tabs) =>{browser.tabs.sendMessage(tabs[0].id, {content})});
return;}, 500);
return;
}
content-script:
function goToSearch(num){
//search for the patent number
browser.runtime.sendMessage({step: 'searchPage'});
window.location = 'https://worldwide.espacenet.com/searchResults?ST=singleline&locale=en_EP&submitted=true&DB=&query=' + num;
return;
}
我希望在加载页面时注入脚本,并且侦听器是可操作的。
感谢您的帮助!