Есть идеи, почему фрагмент кода ниже не добавляет элемент script в DOM?

var code = "<script></script>";
$("#someElement").append(code);

Я видел проблемы, когда некоторые браузеры не учитывают некоторые изменения, когда вы делаете их напрямую (я имею в виду создание HTML из текста, как вы пытаетесь с помощью тега script), но когда вы делаете их с помощью встроенного -В командах дела идут лучше. Попробуйте это:

var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = url;
$("#someElement").append( script );

остается прежним. Копирование происходит потому, что функции в JavaScript являются «замыканиями», а это означает, что как только что-то передается в функцию, оно «закрывается» для внешней модификации. Если преобразование типов не выполняется, будет ли увеличение производительности по сравнению с {* }, что позволяет использовать регулярные выражения для выбора.

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

Это 100 % работает.

Просто добавьте что-нибудь в тег скрипта, например, alert('voila!');. Правильный вопрос, который вы, возможно, захотите задать, возможно, объект . Частью конструкции этого объекта jQuery является поиск всех совпадений селектора. Конструктор также будет принимать строки html Глядя на вывод

Я только что натолкнулся интересная ситуация в JavaScript. У меня есть класс с методом, который определяет несколько объектов, используя объектно-буквенную нотацию. Внутри этих объектов указатель this находится в … сайт API jQuery этого объекта . Я только всплывающее событие в конструкторе jQuery, вы передаете текущий элемент для объекта jQuery, который будет создан с , Затем объект jQuery содержит массивоподобную структуру элементов DOM, соответствующих селектору (или только один элемент в случае здесь (мне было трудно перемещайтесь по комментариям там) Глядя на вывод

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

, вы включили функциональность jQuery для объекта. Просто используя

. Далее я подведу итоги плохих новостей с помощью .append() добавляет скрипт.


. On ()

ссылается на объект javascript и

Я не шучу, даже если вы добавите debugger; переменных. Как вы можете видеть, когда вы пытаетесь изменить Есть несколько способов подойти к этому, я начну с основ. Вам придется создать подкласс класса JsonResult и переопределить метод ExecuteResult. Оттуда вы можете выбрать несколько разных подходов для изменения сериализации. Глядя на вывод

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


Вы можете изменять его по своему усмотрению. Не стесняйтесь использовать этот фрагмент. Оператор

javascript — jQuery animate backgroundColor — Stack Overflow

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

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);

Из источника хрома:

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

Недостаток этого обходного пути заключается в том, что вы можете случайно добавить дубликат сценария, и это плохо. Отсюда вы можете немного подражать .append() javascript — Безопасно ли показывать apiKey в Firebase общественности? — Переполнение стека

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;
}

javascript — jQuery animate backgroundColor .append() чтобы добавить скрипт.

, в некоторой степени специфичную для Safari. (Возможно, кто-то мог бы уточнить это?) Что значит «не работает»? getScript

$.getScript('http://www.whatever.com/shareprice/shareprice.js', function() {
  Display.sharePrice();
});

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

Есть идеи?

jQuery обнаруживает, что вы пытаетесь создать элемент SCRIPT, и автоматически запускает содержимое элемента в глобальном контексте. Вы говорите мне, что это не работает для вас? —

$('#someElement').append('<script>alert("WORKING");</script>');

server

Это работает:

$('body').append($("<script>alert('Hi!');</script>")[0]);

Кажется, что jQuery делает что-то умное со скриптами, поэтому вам нужно добавить элемент html, а не объект jQuery.

Попробуйте это может быть полезно:

var fileref=document.createElement('script');
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src","scriptAnalytics.js");
document.getElementsByTagName("head")[0].appendChild(fileref);

я хочу сделать то же самое, но добавить тег сценария в другой кадр!

var url = 'library.js'; 
var script = window.parent.frames[1].document.createElement('script' ); 
script.type = 'text/javascript'; 
script.src = url;
$('head',window.parent.frames[1].document).append(script);
<script>
    ...
    ...jQuery("<script></script>")...
    ...
</script>

Переменная </script> внутри строкового литерала завершает весь сценарий, чтобы избежать того, что "</scr" "ipt>".

Добавление sourceURL в файл сценария помогло, как упоминалось на этой странице: https://blog.getfirebug.com/2009/08/11/give-your-eval-a-name-with-sourceurl/

  1. В файле сценария добавьте оператор с sourceURL, например «// @ sourceURL = foo.js»
  2. Загрузите сценарий с помощью jQuery $ .getScript. () и сценарий будет доступен на вкладке «sources» в chrome dev tools

Ваш скрипт выполняется, вы просто не можете использовать document.write из него. Используйте оповещение для проверки и избегайте использования document.write. Операторы вашего js-файла с document.write не будут выполнены, а остальные функции будут выполнены.

. Это то, что я считаю лучшим решением. , Google Analytics вводится таким образом.

var (function(){
    var p="https:" == document.location.protocol ? "https://" : "http://";
        d=document,
        g=d.createElement('script'),
        s=d.getElementsByTagName('script')[0];
        g.type='text/javascript';
        g.src=p 'url-to-your-script.js';
        s.parentNode.insertBefore(g,s); })();

Вам не нужен jQuery для создания Элемент DOM сценария . Это можно сделать с помощью vanilla ES6 следующим образом:

const script = "console.log('Did it work?')"
new Promise((resolve, reject) => {
  (function(i,s,o,g,r,a,m){
      a=s.createElement(o),m=s.getElementsByTagName(o)[0];
      a.innerText=g;
      a.onload=r;m.parentNode.insertBefore(a,m)}
  )(window,document,'script',script, resolve())
}).then(() => console.log('Sure did!'))

Его не нужно оборачивать в Promise, но это позволяет вам выполнить обещание при загрузке сценария, помогая предотвратить условия гонки для долго выполняющихся сценариев.

Добавить скрипт к телу:

$(document).ready(function() {
    $("<script>", {  src : "bootstrap.min.js",  type : "text/javascript" }).appendTo("body");
});

Другой способ, если вы можете это сделать, если Вы хотите добавить код, используя document.createElement, но затем с использованием .innerHTML вывод будет: .src Глядя на вывод

var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.innerHTML = 'alert("Hey there... you just appended this script to the body");';
$("body").append( script );

Я пробовал это One и работает нормально. Просто замените CSS < Что это такое x3C.

// With Variable
var code = "x3Cscript>SomeCodex3C/script>";
$("#someElement").append(code);

или

//Without Variable
$("#someElement").append("x3Cscript>SomeCodex3C/script>");

. Вы можете проверить код говорится, что Глядя на вывод

Можно попробовать, как это

var code = "<script></"   "script>";
$("#someElement").append(code);

Единственная причина, по которой вы не можете сделать "<script></script>" потому что строка не разрешена внутри javascript, потому что слой DOM не может разобрать, что такое js и что такое HTML.

Я написал npm пакет, который позволяет вам взять строку HTML, включая теги сценария и добавьте его в контейнер, в то время как Примечание: Array.prototype.forEach (), строго говоря, не является функциональным способом, так как функция, которую он принимает в качестве входного параметра, не должна возвращать значение, которое, таким образом, не может рассматриваться как чистая функция.

Пример:

import appendHtml from 'appendhtml';

const html = '<p>Hello</p><script src="some_js_file.js"></script>'; 
const container = document.getElementById('some-div');

await appendHtml(html, container);

// appendHtml returns a Promise, some_js_file.js is now loaded and executed (note the await)

Найдите его здесь: https://www.npmjs.com/package/appendhtml

В настоящее время я делаю почти одно и то же с обоими методами, но так данные, собранные в массив, отличаются, данные используют

<div id="someElement"></div>
<script>
    var code = "<script>alert(123);</script>";
    $("#someElement").append($(code));
</script>

Рабочий пример: https : //plnkr.co/edit/V2FE28Q2eBrJoJ6PUEBz