BrowserAction.onClicked等待iframe加载

时间:2016-05-03 01:01:29

标签: javascript iframe google-chrome-extension

我想点击我的扩展程序的浏览器操作,然后在滚动之前加载iframe。 window.addeventlistener("load", scroll, false);现在似乎是个问题。

我知道内容脚本会使window.addEventListener工作,但内容脚本也会一直注入脚本,我只想在点击浏览器操作图标时滚动。

我也知道删除window.addeventlistener("load", scroll, false);可以使滚动工作,但那样就不会等到iframe加载了。请帮忙。

的manifest.json

{
 "manifest_version": 2,

 "name": "scroll",
 "description": "scroll",
 "version": "1.0",

 "browser_action": {
   "default_icon": {
     }
 },

 "background": {
   "scripts" : ["background.js"],
   "persistent" : false
 },

 "permissions": [
   "tabs", "<all_urls>"
 ]
}

background.js

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, {file: "scroll.js"});
});

scroll.js

window.addEventListener("load", scroll, false);

function scroll (evt) {
    window.scrollTo(0, 800);
}

1 个答案:

答案 0 :(得分:0)

可能会发生代码执行太晚(load事件之后)。

逻辑应该是:

  • 检查页面是否已加载
    • 如果是,请立即执行
    • 否则,请附上一个监听器

document.readyState履行职责:

function scroll(evt) {
  window.scrollTo(0, 800);
}

if (document.readyState === "complete") {
  scroll();
} else {
  window.addEventListener("load", scroll, false);
}