【问题标题】:setTimeout function in chrome extension popup.js issueschrome 扩展 popup.js 中的 setTimeout 函数问题
【发布时间】:2012-06-24 23:48:11
【问题描述】:

我有一个包含一系列函数的 popup.js 文件。我正在尝试运行一个设置为在创建新选项卡时运行的函数,但延迟时间很短。这是一个函数示例和我尝试过的解决方案。

// function.
function foo_bar()
{
 // some ajax call.
}

// try 1
setTimeout(foo_bar,1000);
EDIT:// executed without delay.

// try 2
setTimeout(function(){
//some ajax call.
},1000)
EDIT:// executed without delay.

// try 3
setTimeout(function(){
foo_bar();
},1000)
EDIT: // didn't seem to execute.

// try 4 and 5
window.addEventListener('load',foo_bar());
window.addEventListener('DOMContentLoaded',foo_bar());
// no delay takes place. The function completes before the page even loads.


// try 6
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {...}); 
// used the status from here to wait till page load is complete.
//problem with this is that sometimes the status doesn't get updated.

// try 7
// tried to delay the php script by using sleep(2), but ajax call would never complete.

有人可以帮忙吗?不确定是否有帮助,但脚本未定义为背景或内容。

编辑:更多细节。调用的函数是执行对远程服务器的 ajax 调用,然后根据数据,使用 chrome.tabs.executeScript 操作新选项卡所在的页面。唯一的问题是,页面有一半时间还没有准备好。

【问题讨论】:

  • 尝试 1-3 有什么问题?
  • 抱歉,刚刚更新。为了延迟该功能,我添加了以毫秒为单位的延迟量。前两个工作毫不拖延。尝试三个从未调用过的函数。

标签: javascript google-chrome-extension settimeout


【解决方案1】:

尝试 4 和 5 应该是:

window.addEventListener('load',foo_bar);
window.addEventListener('DOMContentLoaded',foo_bar);

没有延迟,因为您将它们称为内联。

【讨论】:

  • 我试过了。如果我这样调用它,该函数将不会运行。它似乎只有在包含 () 时才有效。
  • @Jack 那是因为你当时正在调用它,这不是你想要的。这是内容脚本:code.google.com/chrome/extensions/content_scripts.html 吗?
  • 不,它没有被定义为内容脚本。它只是一个生成弹出窗口的 .js 文件。
  • @jack,jack,有什么更新吗?我在我的 google-chrome 扩展程序(script.js)中使用 setTimeout()。但它似乎根本没有触发。你修好了吗?
  • setTimeout 没有按预期工作,它会立即执行,无论您指定什么延迟!
猜你喜欢
  • 2020-02-11
  • 2016-09-13
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多