Кросс-браузерные альтернативы eval - PullRequest
0 голосов
/ 14 июля 2010

Моя html-страница динамически загружает страницы через Ajax для динамических панелей на странице. Мне нужны теги сценария на динамически загружаемых страницах для выполнения. Я исправил код из ТАКого вопроса . Отлично работает на FF / Safari / Chrome.

Но dom-узлы типа script работают по-разному в IE. - Я не могу добавить текст в узел скрипта в IE 7:

//  variable "data" holds the script element's content from an
//  incoming html page loaded via ajax   
var script = document.createElement("script");        
script.type = "text/javascript";
script.appendChild(document.createTextNode(data)); // doesn't work on ie      

// also doesn't work on IE 7:
script.innerHTML = data;
script.innerText = data;

Есть какие-нибудь идеи для того, чтобы заставить SW работать на IE? (Кроме использования eval.)

Ответы [ 2 ]

2 голосов
/ 15 июля 2010

У вас есть несколько вариантов, которые я могу придумать (кроме использования eval).

  • Сценарий может обслуживаться по отдельному пути;установка src элемента script вместо его содержимого должна работать, даже в IE.

  • Сценарий, который должен быть выполнен, может быть присоединен к прослушивателю onload изображения илидругой элемент, который можно добавить к документу, как вы делаете с элементом script.

  • использовать функцию вместо eval.Это, по крайней мере, сохранит оцененный код вне локальной области: new Function(data)();

2 голосов
/ 14 июля 2010

Вы должны просто позвонить eval(data).

Хотя это правда, что eval обычно следует избегать, это одно из немногих исключений.


РЕДАКТИРОВАТЬ : без eval, вы можете сделать это так :

    var scriptNode = document.createElement('script');
    scriptNode.type = 'text/javascript';
    scriptNode.text = data;
    document.head.appendChild(scriptNode); 
    document.head.removeChild(scriptNode); //Optional
...