Фоновый процесс, панель загрузки

Хорошая новость:

Он работает на 100%.

blockquote>

Просто добавьте что-то внутри тега скрипта, например alert('voila!');. Правильный вопрос, который вы, возможно, захотите спросить, возможно, «Почему я не увидел его в DOM?» .

Карл Сведберг сделал приятное объяснение комментарию посетителя в сайт API jQuery . Я не хочу повторять все его слова, вы можете прочитать здесь прямо здесь (мне было трудно перемещаться по комментариям там) .

Все методы вставки jQuery используют внутреннюю функцию domManip для очистки / обработки элементов до и после их вставки в DOM. Одна из функций, которую выполняет функция domManip, - это вытащить любые элементы скрипта, которые должны быть вставлены, и запускать их через «процедуру evalScript», а не вводить их остальной части фрагмента DOM. Он вставляет скрипты отдельно, оценивает их, а затем удаляет из DOM.

Я считаю, что одна из причин jQuery заключается в том, чтобы избежать ошибок «Разрешения на отказ», которые может возникать в Internet Explorer при вставке скриптов при определенных обстоятельствах. Он также избегает многократной вставки / оценки того же скрипта (который может потенциально вызвать проблемы), если он находится внутри содержащего элемента, который вы вставляете, а затем перемещаете DOM.

blockquote>

Следующее, я расскажу, что это плохие новости, используя функцию .append(), чтобы добавить скрипт.


И The Bad News is ..

Вы не можете отлаживать свой код.

blockquote>

Я не шучу, даже если вы добавили ключевое слово debugger; между строкой, которую вы хотите установить в качестве точки останова , вы получите только стек вызовов объекта, не увидев точку останова на исходном коде, (не говоря уже о том, что это ключевое слово работает только в браузере webkit, все остальные основные браузеры, похоже, пропустили это ключевое слово) .

Если вы полностью понимаете, что делает ваш код, это будет незначительным недостатком. Но если вы этого не сделаете, вы добавите ключевое слово debugger; по всему месту, чтобы узнать, что не так с вашим (или моим) кодом. Во всяком случае, есть альтернатива, не забывайте, что javascript может изначально манипулировать HTML DOM.


Обходной путь.

Используйте javascript (не jQuery) для управления HTML DOM

blockquote>

Если вы не хотите потерять возможности отладки, вы можете использовать javascript для собственных HTML DOM-манипуляций. Рассмотрим этот пример:

var script   = document.createElement("script");
script.type  = "text/javascript";
script.src   = "path/to/your/javascript.js";    // use this for linked script
script.text  = "alert('voila!');"               // use this for inline script
document.body.appendChild(script);

Там, как и в старые времена, это не так. И не забудьте очистить вещи, будь то в DOM или в памяти для всего объекта, на который ссылается и больше не требуется, чтобы предотвратить утечку памяти. Вы можете рассмотреть этот код для очистки вещей:

document.body.removechild(document.body.lastChild);
delete UnusedReferencedObjects; // replace UnusedReferencedObject with any object you created in the script you load.

Недостатком этого обходного пути является то, что вы можете случайно добавить дублирующий скрипт, и это плохо. Отсюда вы можете слегка подражать функции .append(), добавив проверку объекта перед добавлением и удалив скрипт из DOM сразу после его добавления. Рассмотрим этот пример:

function AddScript(url, object){
    if (object != null){
        // add script
        var script   = document.createElement("script");
        script.type  = "text/javascript";
        script.src   = "path/to/your/javascript.js";
        document.body.appendChild(script);

        // remove from the dom
        document.body.removeChild(document.body.lastChild);
        return true;
    } else {
        return false;
    };
};

function DeleteObject(UnusedReferencedObjects) {
    delete UnusedReferencedObjects;
}

Таким образом, вы можете добавить скрипт с возможностью отладки, избегая при этом двукратности сценария. Это всего лишь прототип, вы можете расширить его, как хотите. Я использовал этот подход и вполне доволен этим. Конечно, я никогда не буду использовать jquery .append(), чтобы добавить скрипт.

Happy Coding, Hendra Uzia.

0
задан ThomasReggi 24 August 2012 в 02:39
поделиться