选项卡更改URL或重新加载时使用chrome.tabs.executeScript

时间:2014-09-26 10:34:57

标签: javascript google-chrome browser google-chrome-extension

我正在构建Chrome扩展程序,我想将Javascript代码注入并运行到选项卡中。

例如:

chrome.tabs.query({active: true, lastFocusedWindow: true}, function(selectedTab) {
    chrome.tabs.executeScript(selectedTab[0].id, {code: code_});
});

code_变量为:

$('#gbqfq').val('test');
$("#gbqf").submit();

$('#rso > div.srg > li:nth-child(1) > div > h3 > a').click();

这个简单的脚本应该在google.com上执行,应该输入并搜索" test"然后点击第一个结果。

问题是,在提交请求后,选项卡会更改其URL,从而加载另一个页面。似乎当页面加载时,chrome.tabs.executeScript注入的所有脚本都会消失。

有没有办法在同一个标​​签页中的不同页面上运行单个脚本?

我的扩展程序应该允许用户运行自己的脚本,因此事先知道选项卡应该重新加载的脚本的哪一点很复杂(可能不可能?)(为了使用多个{{1} }来电)。

这是我的Extension的manifest.json,我只使用弹出窗口(没有背景,没有content_scripts):

chrome.tabs.executeScript

1 个答案:

答案 0 :(得分:2)

不,在选项卡导航后,您无法运行相同的脚本,因为脚本所在的JavaScript上下文已被拆除。

因此,您需要在页面加载后再次注入脚本。 你可能想要沿着这些方向做点什么:

  1. 注入提交脚本并保存标签ID。
  2. 发起提交。
  3. 收听上面标签ID和状态chrome.tabs.onUpdated过滤的"complete"
  4. 检查网址是否符合预期,然后注入数据收集脚本。