更改页面位置时背景脚本和内容脚本之间的通信

时间:2019-01-02 21:44:49

标签: firefox-webextensions

我正在尝试构建一个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;
}

我希望在加载页面时注入脚本,并且侦听器是可操作的。

感谢您的帮助!

0 个答案:

没有答案