Как я могу заставить этот вызов eval() работать в IE?
-
20-08-2019 - |
Вопрос
У меня есть некоторый javascript, который выходит и извлекает «класс» javascript на другой странице xhtml.Удаленный javascript выглядит примерно так:
(function() {
this.init = function() {
jQuery("#__BALLOONS__tabs").tabs();
};
})
После того, как это будет загружено в this.javascript, я пытаюсь его оценить и создать экземпляр:
this.javascript = eval("(" + this.javascript + ")");
this.javascript = new this.javascript();
this.javascript.init();
Конечно, это прекрасно работает во всех браузерах, кроме IE.В IE происходит сбой в строке eval.Есть ли у кого-нибудь предложения о том, как я могу заставить эту работу работать в IE или альтернативе.
Спасибо, Пит
Решение
Попытался ли ты:
eval("this.javascript = (" + this.javascript + ")");
...?
Другие советы
Это работало как с хорошими, так и с плохими браузерами (т.е.):
var code_evaled;
function eval_global(codetoeval) {
if (window.execScript)
window.execScript('code_evaled = ' + '(' + codetoeval + ')',''); // execScript doesn’t return anything
else
code_evaled = eval(codetoeval);
return code_evaled;
}
Наслаждаться
(eval не является объектным методом в IE).Так что делать?Ответ оказывается в том, что для оценки кода можно использовать собственный метод IE window.execScript.
function loadMyFuncModule(var stufftoeval) {
var dj_global = this; // global scope reference
if (window.execScript) {
window.execScript("(" + stufftoeval + ")");
return null; // execScript doesn’t return anything
}
return dj_global.eval ? dj_global.eval(stufftoeval) : eval(stufftoeval);
}
Если худшее действительно становится худшим, может сработать что-то вроде этого:
var self = this;
funcid = "callback" + Math.random();
window[funcid] = function(javascript) {
delete window[funcid];
self.javascript = javascript;
self.javascript = new self.javascript();
self.javascript.init();
}
document.write("<script language='javascript'>" +
"window." + funcid + "(" +
"(" + this.javascript + "));" +
"</script>");
У меня была та же проблема с eval() в IE, и функция с «window.execScript» у меня не работала.Решение, которое я нашел для получения массивов в javascript со страницы (в моем случае PHP), заключалось в использовании некоторого JSON.
// мойфид.php
return json_encode($myarray);
// myjs.js
$.getJSON('myfeed.php',function(data){dataAlreadyEvaled = data;});
Для этого не нужна функция eval(), если это кому-то поможет...