Кросс-браузерное событие загрузки в теге статического скрипта - PullRequest
0 голосов
/ 22 января 2012

Существует ли кросс-браузерный способ связать событие onload со статическим тегом сценария в html-документе?

В IE 7 и IE 8 не будет работать следующее:

<script onload="DoThat" type="text/javascript" src="..."></script>

Некоторый фон

Я нашел способ сделать это с помощью динамического тега script и операторов if.Например, это объясняется в этой статье MSDN .

Моя проблема заключается в том, что мне нужно найти текущий тег сценария, потому что я создаю виджеты, которые вставляют элементы DOM на месте.В прошлом я нашел некоторые обходные пути для этого , но у всех них есть свои недостатки.Я надеюсь, что использование ключевого слова this в событии загрузки скрипта поможет.

Ответы [ 2 ]

3 голосов
/ 22 января 2012

Насколько я понимаю, ваш код должен знать, к какому элементу скрипта он принадлежит.Затем вы должны вставить необходимое содержимое HTML-виджета прямо рядом с этим сценарием или добавить к родительскому сценарию и т. Д. Если это так, я бы предложил вам другой подход.

Внутри вашего файла javascript виджета вы помещаете следующую строку кода:

var scripts = document.getElementsByTagName('script'),
    thisScript = scripts[scripts.length - 1];

thisScript - это элемент DOM, который вы ищете, текущий элемент сценария, этот код находится в .Так просто.

Почему это работает.Подробное объяснение http://feather.elektrum.org/book/src.html. Просто аннотация:

Когда на странице загружается скрипт с src, остальная часть страницы еще не написана.Подразумевается, что независимо от того, сколько скриптов содержит страница, тот, который в настоящее время начинает выполняться, является последним

Это довольно простой и эффективный метод, хотя об этой возможности знают не так много людей.,Это надежный и 100% совместимый браузер.Кстати, Google использует этот код для рендеринга кнопок +1:

<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
  {lang: 'dk'}
</script>

Так как вы думаете, как скрипт api мог получить параметры этого хеша?В моем примере это будет thisScript.innerHTML

0 голосов
/ 22 января 2012

Я не уверен, что понял ваши потребности.
В любом случае, чтобы найти текущий скрипт, вы можете попробовать этот пример

<script src="jquery-1.7.1.min.js" varTest="valueTest" id="myID"></script>
<script>

var scripts = document.getElementsByTagName('script');      
var pattern = 'jquery-1.7.1.min.js';
var i = undefined;

for (var x=0; x<scripts.length; x++)
{
    if (scripts[x].src.match(pattern)) { i = x; break; }
}

if (typeof(i) != 'undefined')
{
    // Do any association needed here
    var current_script = scripts[i];
    // Just for test            
    console.log(current_script.attributes);
}

</script>
...