Отличается ли порядок загрузки внешних файлов JavaScript в IE8 по сравнению с IE7? - PullRequest
2 голосов
/ 18 сентября 2009

Я спрашиваю, потому что я запускаю приложение, в котором я загружаю файл внешнего скрипта в разделе HEAD страницы, а затем пытаюсь вызвать функцию из него в разделе onLoad тега BODY.

external.js

function someFunction()
{
   alert("Some message");
}

mypage.html

<html>
  <head>
    <script type="text/javascript" language="javascript" src="external.js"></script>
  </head>
  <body onLoad="someFunction();">
  </body>
</html>

Используя инструменты разработчика в IE8, я получаю исключение в операторе onLoad, потому что, по-видимому, внешний файл javascript еще не загружен.

У меня раньше не было этой проблемы в IE7, поэтому мой вопрос.

Они изменили порядок загрузки между IE7 и IE8? Если так, есть ли лучший способ сделать это? (настоящая функция ссылается на многие другие функции и константы, которые выглядят намного лучше во внешнем файле)

Спасибо, B.J.

Ответы [ 3 ]

2 голосов
/ 18 сентября 2009

Ну, на самом деле я чувствую себя довольно глупо.

Оказывается, проблема не в порядке загрузки. Проблема заключалась в том, что внешний файл javascript имел синтаксическую ошибку в одной из своих функций, и, очевидно, когда было сгенерировано исключение, он полностью аннулировал весь файл, что делало остальные функции недоступными для главной страницы.

Я не уверен, отличается ли это поведение в IE8 по сравнению с IE7, но в любом случае это была настоящая проблема.

Спасибо за ваш ответ.

B.J.

1 голос
/ 18 сентября 2009

Я очень сомневаюсь, что его изменили, это сломало бы значительное количество сайтов.

Попробуйте это (без использования инструментов разработчика): -

<body onload="alert(somefunction)">

это не должно сломаться и сообщит вам, выполняется ли в момент загрузки загрузка, можно ли увидеть идентификатор somefunction.

0 голосов
/ 18 сентября 2009

Предполагая, что происходит то, что, по вашему мнению, происходит, вы должны попытаться присоединить body.onLoad позже.

Чтобы упростить вещи, вы можете сделать это с помощью Prototype (включая, конечно, прототип) с помощью

Event.observe(window, 'load', function() { myFunction.init() });

или JQuery (включая JQuery) с

$(document).ready(function(){
  // Your code here...
});

Я думаю, что есть чистый способ сделать это на Javascript, но проблема в том, что элемент body еще не существует, поэтому он груб ...

Тем не менее, у меня не было проблем с запуском тела загрузки в Javascript с IE8 и помещением его прямо в тег тела с использованием внешних файлов. Я собираюсь проверить это прямо сейчас из любопытства и сообщу.

Редактировать: Нет проблем с загрузкой из внешнего файла. Однако, пока мы работаем над этим, вы можете узнать JQuery, Prototype или Scriptaculous:)

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