2011-10-06 94 views
2

,先看看我的fiddle fiddle如何将jQuery传递给eval'd代码?

的jsfiddle是好的,但有时它运行有点慢,所以我做了这个简单的纯JS小提琴

伟大的工作,到目前为止,(可以在本地运行),但我想能够在我的小提琴中使用jQuery。在左下角的框中输入alert(typeof $);,然后按“运行”查看我的意思(说未定义)。

那么,如何将jQuery传递给iframe并给它正确的上下文?我怀疑我可以设置doc.contentWindow.$=$或类似的东西,但我仍然需要给出正确的上下文,以便知道在哪里查找元素。我会怎么做?


iframe.contentWindow.$ = $.proxy($,iframe.contentWindow); 

这也不能工作。让我可以访问jQuery,但上下文仍然是错误的。


iframe.contentWindow.$ = function(s){return $(s,doc);}; 

那种作品......但它是一个黑客攻击的一位。

+0

为什么不使用指向Google CDN的''中,好像它试图关闭字符串外部的实际'',并在中间结束脚本块,你需要重新调整一点点:'\ x3Cscript type =“text/javascript”src =“http://code.jquery.com/jquery-1.6.4.js”> \ x3C/script>'。[So urce](http://stackoverflow.com/questions/236073/why-split-the-script-tag-when-writing-it-with-document-write)。 –

+0

这么想!谢谢。这摆脱了JS错误,但jQuery仍然无法访问。 – mpen

1

我调整你的小提琴提琴一点:http://jsfiddle.net/gilly3/XcSYz/3/

首先,你不能写一个DOCTYPE对身体的innerHTML并期望它能够为你做任何事情。与charset元标记一样。我把所有这些都转移到了document.write电话。

您正在评估编辑器输入的脚本标记。首先,如果您正在编辑HTML框架中的脚本标记,这会引发错误。其次,如果您将alert("hello")放置在HTML窗格的脚本标记中,那么每次按键时都会收到警报。第三,您正在父窗口的上下文中评估脚本。我更改了html脚本标记,以便在单击运行并使用正确的上下文时进行评估。

由于你不想每次都重写文档(你不能,例如doctype),我稍微修改它来做一些dom操作。它将删除并替换样式标记,并仅将HTML窗格内容写入主体的innerHTML。

这是一个有趣的小项目,你正在尝试。 jsFiddle是越野车,需要一些更新。我不知道你的纯粹的客户端小提琴是如何可行的 - jsFiddle非常强大(尽管存在缺陷),但尝试一下你的方法是一个不错的练习。包括在this version还有一个变化:

编辑我修改你的文字区域使用width: 50%; height: 50%;而不是设置rightbottom。那些在IE或FF中无法正常工作。

+0

第一段:哎呀。没有想到一个通过。第二:是的,我意识到同样的事情,这就是为什么我添加了“运行”按钮,但我忘了删除旧代码。我可能会有一个复选框,但在编辑html时会持续运行。感谢提示/帮助!我可能会试着看看他们以后如何做语法高亮和缩进。 – mpen

+0

你为什么要删除'