从内容脚本同步获取存储数据

Mos*_*rdy 6 javascript jquery google-chrome google-chrome-extension

我目前正在开发Chrome扩展程序,Github提供了源代码.目标是将自定义Javascript注入网页.

目前,我将每个自定义Javascript Inject存储在localStorage中,并从内容scipts中调用它们.我已将run_at设置为document_start.

我使用它,从后台脚本获取存储的注入:

chrome.extension.sendMessage({method:"get_injects"},function(injects){
    for(index in injects){
        if(/^items\./.test(index)){
            itemJSON = injects[index];
            //if(window.location.host.toString().indexOf(itemJSON.url)){
            if(window.location.host.toString().match(itemJSON.url + '$')){
                var js = itemJSON.js.toString();
                eval(js);
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

问题

我想在文档加载之前准确运行Inject脚本 .但是使用提出的方法,控制将通过并且不会等待获得响应.因此,将在页面加载的中间执行.我该如何解决这个问题,这样我才能在页面加载之前注入?chrome.extension.sendMessageinjectseval(js);

Den*_*ret 4

在 Chrome 中,每个选项卡都在自己的进程中运行。后台页面在扩展进程中运行,该进程与您挂钩的选项卡之一不同。所以恐怕不可能有真正同步的解决方案。

即使使用chrome.storage(没有来源限制,因此不需要背景页面)也会是异步的。

但这里有一个适用于大多数页面的解决方案:

  1. 如果您需要的数据在页面的localStorage中,则执行6
  2. 删除页面中的所有内容
  3. 执行异步数据请求
  4. 当你有数据时,将其存储在页面的localStorage中(不是后台的)
  5. 使用相同的 URL 刷新页面
  6. 利润