Добавить <script> при подготовке HTML-кода для iframe: без выполнения

0

Я готовлю HTML-код в памяти для iframe, когда я использую append, он выполняет код.

html = $(parser.parseFromString($("#EHtml").val(), "text/html"));
js = '<script>' + $("#EJs").val() + '</script>';
html.find('body').append(js);

$("#EHtml").val() содержит HTML-код, а функция append выполняет свою работу, но также выполняет код. Любые мысли здесь?

  • 0
    Каково значение $("#EJs").val()
  • 0
    это код js в строке. это может быть: 'alert ("a")'
Показать ещё 11 комментариев
Теги:
iframe

5 ответов

1
Лучший ответ

Вам нужно просто сохранить ссылку на строку кода и сделать одну из двух вещей: либо добавлять взаимодействие только тогда, когда вы хотите запустить код позже, либо запустить eval(jsString) когда хотите его запустить.

  • 0
    Итак, я должен поставить HTML на IFrame, и использование добавить туда?
  • 0
    Везде, где код предназначен для. Просто не забудьте дождаться добавления, пока вы не захотите выполнить код.
Показать ещё 4 комментария
1

Теги скрипта не будут выполняться, если их атрибут [type] установлен на все, что угодно wacky.

<script type="wacky/non-executing">
  console.log("This will not execute! You will not see this!");
</script>
  • 0
    Не отвечает на вопрос и тип не установлен на что-то странное в примере
  • 0
    @EnjoysTurtles: Q: «Добавить <script> при подготовке html-кода для iframe: без выполнения« A: »Теги сценария не будут выполняться, если для их атрибута [type] установлено что-то дурацкое» Расширенный ответ: Вы можете добавить < script>, не выполняя его, установив его атрибут [type] на что-либо, не распознаваемое браузером. [type = "text / javascript"] вызовет выполнение, равно как и пропуск атрибута в теге script. Это означает, что вы можете оставить сценарий бездействующим в HTML-коде и инициировать выполнение, установив для [text] тега script значение «text / javascript».
Показать ещё 2 комментария
1

Его очевидный запуск сценария при его вставке между ярлыками сценариев, потому что ваш DOM уже заполняет нагрузки. И он будет работать дважды, потому что вы помещаете его в body Поэтому, когда содержимое вашего тела сжимает скрипт, он снова запускается!

Таким образом, вы должны установить свой тег Script во главе iframe чтобы он запускался только тогда, когда вы вставляете его или перезагружаете, а не снова!

Я не предлагаю вам использовать eval() потому что это опасно для оценки скрипта, eval() в основном используется для другой цели!

Используйте теги <script></script> чтобы запустить скрипт и поместить его на head если вы не хотите запускать его дважды.

var script = document.createElement('script');
script.innerHTML =  $("#EJs").val();
iframe.contentWindow.document.head.appendChild(script);

Может быть, это поможет вам..

0

Получил это так, как мне нужно. Я пытался добавить тег сценария, не используя пути вокруг проблемы - я имею в виду, что я просто хотел добавить тег как есть. Спасибо каждому органу за входные данные - я получил решение от ваших советов... в конце концов, я мог добавить в iframe, но он выполнялся в контексте главной страницы. Что вызвало проблему, было использование JQuery для добавления... так вот это:

frame = document.getElementById("frame");
out = (frame.contentWindow) ? frame.contentWindow : (frame.contentDocument.document) ? frame.contentDocument.document : frame.contentDocument;

out.document.open();
out.document.write(html.find('html')[0].outerHTML);//HTML added here

    //JS appended here
js=out.document.createElement('script');
js.innerHTML = 'js code here';
out.document.getElementsByTagName("body")[0].appendChild(js);


out.document.close();

Надеюсь, это полезно для кого-то...

0

Попробуйте использовать объекты, например

var encodeHtmlEntity = function(str) {
  var buf = [];
  for (var i=str.length-1;i>=0;i--) {
    buf.unshift(['&#', str[i].charCodeAt(), ';'].join(''));
  }
  return buf.join('');
};
html.find('body').append(encodeHtmlEntity(js));

добавлять и

var decodeHtmlEntity = function(str) {
  return str.replace(/&#(\d+);/g, function(match, dec) {
    return String.fromCharCode(dec);
  });
};
decodeHtmlEntity(html.find('body').val());

читать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню