Не нарушил ли браузер Chrome динамическую загрузку скриптов? - PullRequest
1 голос
/ 20 июля 2011

Это не мой код, я просто устраняю его.Некоторый код, который работал более года, теперь перестал работать в Chrome (12.0.742.122), но работает в других «больших» браузерах (включая поддерживающего WebKit стабильного Safari (5.0.5)).Под «больше не работает» я подразумеваю, что, хотя файл сценария загружается, он не выполняется.Такое поведение вы ожидаете, загружая скрипт во innerHTML или записывая его в div, но ни одна из них не выполняется.Все закомментированные строки, приведенные ниже, были неудачными попытками заставить его работать, первой из которых был оригинальный код, который работал до недавнего времени.

<div id="abc"></div>
<script type="text/javascript">
var d=document.getElementById("abc");
var s=document.createElement('SCRIPT');
if(s){s.src=script_path;}
//if(d)d.appendChild(s);        //original line that still works in all other browsers
//if(d)d.parentNode.appendChild(s);
//if(d)d.parentNode.insertBefore(s,d);
//if(d)d.parentNode.insertBefore(s,d.nextSibling);
document.body.appendChild(s);   //this works, script executes
</script>

Что требуется от этого кода выше, так это то, чтоскрипт является дочерним элементом div.Предположительно они хотят иметь возможность удалить этого ребенка и одновременно удалить все сценарии (я не уверен в их мотивации).

Ответы [ 4 ]

3 голосов
/ 21 июля 2011

Я обнаружил, в чем проблема, во многом благодаря тому, что Мартин Бидер работал туда-сюда и познакомил меня с jsfiddle.net с его рабочим примером.думаю, будет довольно безобидной ошибкой, которую они допустили при ее создании.Div и весь код будут представлены ниже просто как ######, поскольку это даже не относится к проблеме.Это на самом деле проблема HTML.Chrome 12 не устраивает, если вы не правильно сопоставляете закрывающие тегиЯ действительно не могу поверить, что это влияет на выполнение файлов скриптов, но это так.За последние 10 минут я много раз пробовал с правильными и неправильными тегами HTML, и невероятно, что это действительно проблема.

<font><center><b>
##########
</b></font></center>

Вы видите, что теги шрифта и закрывающие центр неверны.и этого достаточно, чтобы запутать Chrome настолько, чтобы он не выполнял динамический скрипт, добавляемый в эти теги.Bizarre.Я не могу воссоздать это на jsfiddle, возможно, из-за характера сайта запускается html / js, который вы поместили на него (например, с помощью onload).

1 голос
/ 20 июля 2011

Нет, это работает.Google Analytics тоже использует.

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);
0 голосов
/ 24 июля 2013

Это все о трех вещах. Организация, оптимизация и отладка.

1) правильная область видимости ваших тегов облегчает чтение. 2) правильная организация вашего кода облегчает анализ, а значит, анализаторы могут быть быстрее и эффективнее. 3) многие инструменты отладки, которые мы используем, полагаются на эту организацию, чтобы отображать такие вещи, как сворачиваемые теги и представлять более визуальную область видимости

0 голосов
/ 20 июля 2011

Вы пытались установить async элемент скрипта?

var script = document.createElement('script');
script.async = 'async';
...