Javascript,可以检查HTML <script>标签中是否存在函数?</script>

时间:2011-01-20 12:03:07

标签: javascript ajax google-visualization

我有以下设置:一个Javascript文件(包含一个Ajax将放入新Div的google可视化功能)和一个vbscript文件,其中包含Ajax调用的实现函数,该函数在标签内写入google visualization javascript。

在javascript文件中的Ajax调用中,我将Ajax调用的内容放入一个新的div中,并将其附加到容器div。然后我调用了一个google javascript函数,这是Ajax调用添加到html的新内容。

如果我在google javascript函数调用之前有一个alert或setTimeOut(),它就可以了。如果我只是立即调用它没有的功能。因此,在新的Ajax添加的javascript代码可以被识别之前,似乎有一些延迟。

有没有优雅的方法可以在没有超时的情况下调用该函数?我写了一个while循环来保持循环,直到找到新的附加节点,但函数调用仍然无法识别。

    function ProcessAjaxCall(DivID, ResponseText)
    {
        var NewDiv = document.createElement("div"); 
        NewDiv.id = "myscript";
        NewDiv.innerHTML = ResponseText;
        document.getElementById(DivID).appendChild(NewDiv);
        //alert('Function below only works when this outputs');
        MyGoogleJSFunction('Arg');
    }

因此,MyGoogleJSFunction是通过Ajax调用编写的代码的一部分,位于NewDiv内。

1 个答案:

答案 0 :(得分:1)

这是因为解析器在执行JavaScript时无法重新呈现当前页面(至少现在还没有)。您必须给予控制权以允许浏览器加载并执行包含的脚本。一种方法是使用setTimeout(例如延迟0);另一种方法是关闭并重新打开当前的脚本元素,就像Google Analytics做的那样:

<script type="text/javascript">
    var _gaq=_gaq||[];
    _gaq.push(['_setAccount','UA-XXXXXXX-X']);
    _gaq.push(['_trackPageview']);
    (function(){
        var ga=document.createElement('script');
        ga.type='text/javascript';
        ga.async=true;ga.src='http://www.google-analytics.com/ga.js';
        var s=document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(ga,s);
    })();
    _qoptions={qacct:"p-c1rF4kxgLUzNc"};
    /* now close this script element, so we can use functions included
     * by the GA script */
</script>
<script>
    // …
</script>