Javascript, можно проверить, существует ли функция в тегах HTML <script>? - PullRequest
1 голос
/ 20 января 2011

У меня есть следующие настройки: файл Javascript (содержащий функцию визуализации Google, которую Ajax поместит в новый Div), и файл vbscript, содержащий функцию реализации для вызова Ajax, которая записывает JavaScript-визуализацию Google в теги.

В вызове Ajax в файле javascript я помещаю содержимое вызова Ajax в новый div и добавляю его в контейнерный div.Затем я вызываю одну из функций Google javascript, которая представляет собой новый контент, добавляемый вызовом Ajax в html.

Если у меня есть предупреждение или setTimeOut () перед вызовом функции Google javascript, это работает.Если я просто сразу вызываю функцию, то это не так.Таким образом, кажется, что есть некоторая задержка, прежде чем новый код JavaScript, добавленный Ajax, может быть распознан.

Есть ли какой-нибудь элегантный способ вызова функции без тайм-аута?Я написал цикл 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 Ответ

1 голос
/ 20 января 2011

Это связано с тем, что синтаксический анализатор не может перерисовать текущую страницу при выполнении 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>
...