javascript – 让我的用户脚本等待加载其他脚本

前端之家收集整理的这篇文章主要介绍了javascript – 让我的用户脚本等待加载其他脚本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
[编辑:我用一个简单的例子来代替原来的,令人困惑的问题来证明这个问题.]

背景

我正在尝试编写一个将在Chrome中运行的用户脚本.这个脚本需要调用一个在usercript之外的JavaScript函数AlertMe() – 这个函数页面的一部分,包含在服务器端动态生成的变量,所以不可能重写这个功能在我的用户名中.

页面上的脚本(visit the page):

<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>

我的用户名(install it in Chrome):

function tryAlert()
{
    if (typeof AlertMe == "undefined") {
        console.log('AlertMe is undefined.');
        window.setTimeout(tryAlert,100);
    }
    else {
        AlertMe();
    }
}

tryAlert();

问题

当我尝试简单地调用功能时,Chrome的控制台让我知道AlertMe未定义.认为这是因为我的用户脚本在加载所有其他脚本之前运行,我使用setTimeout等待AlertMe函数被定义.

不幸的是,如果您安装脚本然后访问该页面,您将看到这只是输出AlertMe未定义.永远,永远不会调用功能.如果您在Chrome控制台中键入typeof AlertMe,它将正确响应“功能”,那么为什么我的用户脚本始终认为AlertMe未定义?

解决方法

这不是时间问题.

您正在遇到Greasemonkey的安全限制,这会阻止您在页面中执行功能.请参阅我之前的问题的答案,以获得解释和一些安全的解决方法

UserScripts & Greasemonkey: calling a website’s JavaScript functions

猜你在找的JavaScript相关文章