IE не получается при вызове функций из внешнего javascript? - PullRequest
2 голосов
/ 03 марта 2009

У меня есть фрагмент кода, который можно упростить до этого:

var s='' ; 

s += "<"+"script type=\"text/javascript\" src=\"http://somehost.com/scripts/FooFunctions.js\">\n";
s += "<"+"/script>" ;
s += "<"+"script type=\"text/javascript\">\n";
s += "FooFunction(42, 'i love cats');\n";
s += "<"+"/script>" ;

document.write(s) ; 

Во всех браузерах, кроме IE, это выполняется так, как вы и ожидаете - функции из somehost.com/scripts/FooFunctions.js работают как положено.

В Internet Explorer это не работает.

Гуглить это кажется трудным. Я нашел случайный пост с той же проблемой, но не нашел решения.

(Существует веская причина, по которой внешний файл должен быть включен из javascript таким образом, и что в pgae не может быть вставлен <script src="http://somehost.com/scripts/FooFunctions.js">.)

Для ясности вопрос заключается в следующем: как сделать так, чтобы вышеуказанный фрагмент кода функционировал в Internet Explorer так же, как, например, в. FireFox

Ответы [ 3 ]

2 голосов
/ 04 марта 2009

Попробуйте, это работает в IE


function addJsFile(jsFileLocation){
    var script=document.createElement('script');
    script.type='text/javascript'; 
    script.src=jsFileLocation; 
    document.getElementsByTagName("head")[0].appendChild(script);
}
addJsFile("http://code.jquery.com/jquery-latest.pack.js");
setTimeout(function(){alert(jQuery);},1000);
0 голосов
/ 04 марта 2009

Как только вызов document.write завершится, он запустит функцию во втором теге сценария. Независимо от того, загружен ли внешний скрипт или нет. Это должно быть не только проблемой IE, но должно влиять на все браузеры. Вы уверены, что это не влияет на другие браузеры, поскольку они кэшируют внешний скрипт? Что происходит, когда вы очищаете кеш и попробуйте снова в другом браузере?

В любом случае, в идеальном мире вы должны просто иметь возможность использовать .onload для тега скрипта, но я на 99% уверен, что есть проблемы с onload, не запускающим теги скрипта в IE6, поэтому нам нужно прибегнуть к использованию onload вместо элемента окна. Это событие не сработает, пока не будут загружены все сценарии, включая внешние файлы js, как указано выше.

0 голосов
/ 04 марта 2009

Похоже, IE вызывает FooFunction перед загрузкой скрипта. Вы можете проверить это, используя setTimeout("FooFunction(42, 'i love cats')", 1000); при условии, что для загрузки скрипта достаточно одной секунды, этот вызов будет успешным.

Если вы не можете использовать фреймворк, такой как jQuery, для загрузки скриптов, который предоставит вам обратный вызов при загрузке скрипта, вы можете взломать свой собственный с помощью setInterval, проверяя на FooFunction

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...