首先,查看我的fiddle fiddle
jsFiddle很好,但有时它运行有点慢,所以我制作了这个简单的纯JS小提琴(可以在本地运行)
到目前为止工作得很好,但我希望能够在我的小提琴中使用jQuery。在左下角的框中键入alert(typeof $);
,然后按“运行”查看我的意思(未定义)。
那么如何将jQuery传递给iframe并为其提供正确的上下文?我怀疑我可以设置doc.contentWindow.$=$
或类似的东西,但我仍然需要提供正确的上下文,以便它知道在哪里找到元素。我该怎么做?
iframe.contentWindow.$ = $.proxy($,iframe.contentWindow);
这也不起作用。让我访问jQuery,但上下文仍然是错误的。
iframe.contentWindow.$ = function(s){return $(s,doc);};
那种作品......但它有点像黑客。
答案 0 :(得分:1)
为什么不像jsfiddle那样做呢?它只是在head
的{{1}}中包含jQuery(或您要求的任何框架)的脚本标记。
如果你查看......呃“外部”iframe
(创建的一个jsfiddle)的head
,你会看到他们只是把它扔进那里:
iframe
同样的事情适用于“on ready”和“on load”选项,jsfiddle只是在你的javascript中包含适当的调用,然后将其注入iframe。
稍微修改一下代码,您可以创建一个<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.js"></script>
元素:
script
然后将该元素附加到var doc = iframe.contentWindow.document;
var jqueryTag = doc.createElement('script');
jqueryTag.type = 'text/javascript';
jqueryTag.src = 'http://code.jquery.com/jquery-1.6.4.js';
。
答案 1 :(得分:1)
我稍微调整了你的小提琴:http://jsfiddle.net/gilly3/XcSYz/3/
首先,你不能在主体的innerHTML中写一个doctype,并期望它为你做任何事情。与charset元标记相同。我把所有这些都移到了document.write
电话。
您正在评估编辑器输入的脚本标记。首先,如果您在html框架中编辑脚本标记,则会抛出像疯了一样的错误。其次,如果在HTML窗格中的脚本标记中放置alert("hello")
,那么每次按键时,都会收到警报。第三,您正在父窗口的上下文中评估脚本。我在单击运行并使用正确的上下文时更改了要评估的html脚本标记。
由于你不想每次都重写文档(你不能,例如doctype),我稍微修改它来做一些dom操作。它删除并替换样式标记,并仅将HTML窗格内容写入正文的innerHTML。
这是一个有趣的小项目,你正在尝试。 jsFiddle有缺陷,需要一些更新。我不知道你的纯粹的客户端小提琴是多么可行 - jsFiddle非常强大(尽管有它的错误),但是尝试一下你的方法是一个很好的练习。
修改:this version中又包含一项更改:我修改了您的textareas以使用width: 50%; height: 50%;
,而不是设置right
和bottom
。那些在IE或FF中无法正常工作。