【发布时间】:2017-12-20 17:03:36
【问题描述】:
我正在尝试制作一个 chrome 扩展,并且在我的 content script 中,它只在 www.youtube.com 上运行,它应该检查 document.getElementById("movie_player"),是否已加载特定的 div 元素。如果不是setInterval,请稍等。如果已加载,则运行 alert("Hello") 和 clearInterval 这将结束脚本。
但是,它不起作用。即使在我找到该元素后,它会说“Hello”,它会继续说 hello,这意味着 setInterval 在 1000 毫秒后仍在调用我的函数,即使它应该已被清除。
这是我的content.js 文件:
var timeOut;
function CheckDOMChange()
{
moviePlayer = document.getElementById("movie_player");
if(moviePlayer !== null)
{
WhenVideoLoads();
}
timeOut = setInterval("CheckDOMChange();", 1000);
}
function WhenVideoLoads()
{
alert("Hello");
clearInterval(timeOut);
}
CheckDOMChange();
如您所见,我将timeOut 设为全局变量,因此它不应该是范围问题。所以我真的不知道问题出在哪里,因为正在满足条件并且正在调用clearInterval。
任何帮助将不胜感激。
【问题讨论】:
-
@FastSnail 这不是问题。无论哪种方式,您都可以调用该函数。即使更改了我的代码,我仍然得到相同的输出。
-
除了答案之外,您还应该避免在 setInterval 或 setTimeout 中使用带引号的函数。你应该使用
CheckDOMChange而不是"CheckDOMChange();"。引用的变体是“eval”的一种形式,可能会在压缩器和其他代码检查器中破坏您的代码。
标签: javascript html google-chrome google-chrome-extension