有没有一种方法可以在JavaScript中执行类似于window.eval()的jQuery
Is there a way to execute jQuery similar to window.eval() in JavaScript?
我有以下代码来在iframe中执行JavaScript(在本例中为frames[0],因为应用程序在任何给定时间都只包含1个iframe):
如果js
包含核心/纯JavaScript:,则以下操作有效
var js = ""; // JavaScript code here
frames[0].window.eval(js);
但如果"js"包含jQuery:,它就不起作用
var js = ""; // JavaScript or jQuery code here
var preview = document.createElement('iframe_id');
preview.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ;
document.body.appendChild(preview);
frames[0].window.eval(js);
jQuery中有window.eval()的替代方案吗?我知道.globalEval()是存在的,但它似乎有不同的用途。
这是因为jQuery还没有加载,您可以在iframe上附加一个onload
或检查onreadystatechanged
,以确定它何时加载。
原因可能是您的iframe没有加载jquery库。尝试:
var js = ""; // JavaScript or jQuery code here
var preview = document.createElement('script');
preview.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ;
frames[0].window.document.body.appendChild(preview);
frames[0].window.eval(js);
document.createElement('script');
而不是document.createElement('iframe_id');
- 执行这一行
frames[0].window.document.body.appendChild(preview);
为您的iframe加载jquery
在尝试评估使用jQuery语法的代码之前,必须确保加载了jQuery脚本。看看这根线https://stackoverflow.com/a/6725358/937367.
function scriptTag(src, callback) {
var s = document.createElement('script');
s.type = 'text/' + (src.type || 'javascript');
s.src = src.src || src;
s.async = false;
s.onreadystatechange = s.onload = function() {
var state = s.readyState;
if (!callback.done && (!state || /loaded|complete/.test(state))) {
callback.done = true;
callback();
}
};
// use body if available. more safe in IE
(document.body || head).appendChild(s);
}
像下面这样在回调函数中评估代码,一切都会好起来的。
var js = ""; // JavaScript or jQuery code here
scriptTag("http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js", function(){
frames[0].window.eval(js);
});
我在这里测试过http://jsfiddle.net/SFUbg/2/.我不知道为什么在那个scriptTag函数中使用doc
而不是document,因为这不是等价的,所以我更改了它jQuery不是一种独立的语言。代码不起作用的至少一个原因是createElement采用了标记名,而"iframe_id"不是。
此外,您还将iframe的src直接设置为jQuery。您应该将其设置为HTML页面,或者about:black,然后以某种方式加载jQuery。加载它的最简单方法就是通过显式加载jQuery将iframe URL设置为HTML页面。
EDIT:如果iframe已经存在并且已经加载,并且您只想将jQuery添加到其中,那么Jan.J的回答应该会有所帮助。
以下是我们在一个使用多个iframe的项目中非常成功地使用的代码,这些代码适用于您看起来正在做的事情:
function setContent(source) {
var iframe = document.createElement("iframe");
iframe.style.opacity = 0.0;
document.body.appendChild(iframe);
// set new content
doc = iframe.contentDocument;
doc.open();
doc.write(sourceCode);
doc.close();
// kill off old iframe
document.body.removeChild(document.querySelector("iframe"));
iframe.style.opacity = 1.0;
// inject the script you needed
var scriptElement = doc.createElement("script");
scriptElement.src = "...";
doc.querySelector("head").appendChild(scriptElement);
}
还有一个http://jsbin.com/iFoZAdU/8/edit用于工作代码。
现在请不要再发布五个相同的问题。
- Javascript日期格式类似于ISO,但本地
- toBoolean方法类似于toString
- 州和城市选择框类似于国家细分页面
- 通过传递图像的URL通过javascript读取/处理图像-类似于PHP中的file_get_contents
- 在BootStrap菜单栏中为所选项目设置背景,类似于BootStrap中的父导航选项
- 检测演示者工具的事件,类似于onmousedown
- 类似于Prism的Knockout js框架
- 创建类似于Google analytics的分析地图
- 敲除js变量设置类似于调用函数
- 如何处理javascript中的循环引用,类似于Excel提供迭代限制的方式
- 用null填充稀疏数组(类似于压缩两个数组)
- jQuery模态弹出的行为类似于确认和警报对话框
- 如何垂直淡出文本,类似于Amazon'的产品说明
- 如何在JavaScript中创建类似于something.function()的函数
- 关闭按钮(右上 X)以执行类似于控件的操作
- 是否有类似于“$(window).load();”的东西用于在新插入的 Ajax 内容完成加载后执行函数
- 有没有一种方法可以在JavaScript中执行类似于window.eval()的jQuery
- 类似于jQuery when/then的东西:带break的延迟执行
- 如何在事件循环之外执行延迟javascript,类似于gwt的DeferredCommand
- 单击按钮执行类似于表中“转发”的操作