[编辑:我用一个简单的例子来代替原来的、令人困惑的问题。]
背景
我正在尝试编写一个将在 Chrome 中运行的用户脚本。该脚本需要调用用户脚本AlertMe()
之外的 JavaScript 函数——该函数是页面的一部分,包含在服务器端动态生成的变量,因此无法在我的用户脚本。
代码
页面上的脚本(访问页面):
<script type="text/javascript">
function AlertMe()
{
alert("Function AlertMe was called!");
// then do stuff with strings that were dynamically generated
// on the server so that I can't easily rewrite this into the userscript
}
</script>
我的用户脚本(安装在 Chrome 中):
function tryAlert()
{
if (typeof AlertMe == "undefined") {
console.log('AlertMe is undefined.');
window.setTimeout(tryAlert, 100);
}
else {
AlertMe();
}
}
tryAlert();
问题
当我尝试简单地调用该函数时,Chrome 的控制台让我知道AlertMe is not defined
. 认为这是因为我的用户脚本在所有其他脚本加载之前运行,我曾经setTimeout
等待AlertMe
函数被定义。
不幸的是,如果您安装脚本然后访问该页面,您会看到它只是永远输出AlertMe is undefined.
并且永远不会调用该函数。如果您typeof AlertMe
在 Chrome 的控制台中输入,它会正确响应"function"
,那么为什么我的用户脚本总是认为AlertMe
未定义呢?