【问题标题】:Syncronus callback between content script and background.html内容脚本和 background.html 之间的同步回调
【发布时间】:2012-10-20 11:21:09
【问题描述】:

我知道没有办法做到这一点,但有一种方法可以专门针对我的任务。当我打开超过 30 个标签时,我想尽快在内容脚本中执行 window.stop() 命令,以加快 google chrome 启动速度。通常我会从内容脚本向 background.html 发送一个请求,以查找当前选项卡是否处于非活动状态,等待响应然后执行 window.stop()。但这是一个坏主意,因为当同时加载 30 个选项卡时,响应需要很长时间才能响应。所以我需要一个同步回调来在内容脚本被激活后立即停止页面。所以我想出了这个解决方案。在 background.html 我这样做

chrome.tabs.getAllInWindow(null,
function(tabs)
{ tabs.forEach(
  function(tab)
  { //check if tab is active
    //if it's not do chrome.tabs.update(tab.id, {url: "modified_url", selected: tab.selected})
  })
})

我尝试了两种修改url的方法

1: google.com => google.com//

2: google.com => google.com???

当内容脚本检查 window.location.href 并找到双斜杠或三问号时,它会执行 window.stop()

所以 chrome 在加载时让我没有时间死去 :)

但这种方式并不完美。很多页面会自动更正此类 url。当然,这很粗鲁。

所以也许还有另一种方法可以使用 background.html 对选项卡执行某些操作,以便内容脚本知道它以避免消息传递?

【问题讨论】:

  • 我尝试使用 // 和 ???同时,似乎那些对其网址进行更正的页面仍然没有这样做。
  • 哦,不,youtube 不适合这个网址挑逗
  • 也尝试了这个技巧:将 url 更改为 "about:blank->http://google.com" 似乎 content_script 在此类页面上不起作用并且也执行脚本。
  • 也尝试了这个技巧:将 url 更改为 file:///C:/tmp/1.htm?http://google.com 想法是通过 XMLHttpRequest 通过内容脚本获取 favicon,结果:NETWORK_ERR: XMLHttpRequest Exception 101。这是正常的,也是克服 start chrome 的唯一方法特殊参数(类似于允许文件读取文件...)
  • 发现一个关于我的案例的问题,点击一个星来帮助我http://code.google.com/p/chromium/issues/detail?id=54257plee:)eease

标签: javascript google-chrome-extension


【解决方案1】:

如何代替:

chrome.tabs.update(tab.id, {url: "modified_url", selected: tab.selected});

在做:

chrome.tabs.executeScript(tab.id, {code: "window.close()"});

【讨论】:

  • 你的意思是chrome.tabs.executeScript(tab.id, {code: "window.stop()"}); 不幸的是,这行不通,如果这样做了,事情就会变得容易。没有其他的 executeScript 技巧可以发挥作用,即使你说 chrome.tabs.executeScript(tab.id, {code: "alert('!')"}); 当消息出现时为时已晚,整个页面已经被加载。
【解决方案2】:

我发现了一种允许在内容脚本和背景 html 之间同步传递 boolean 值的方法。涉及到webRequestAPI。
我所做的是从内容脚本发送XMLHttpRequestwindow.location.href
然后我在后台 html 中捕获该请求并检查它的 url,如果它与发送它的选项卡的 url 匹配,我要么取消请求,要么让它运行。
这样,内容脚本可以定义后台发生的事情,因为取消了请求
返回-1

【讨论】:

    猜你喜欢
    • 2012-07-29
    • 2011-07-05
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    相关资源
    最近更新 更多