问题在于,默认情况下,Prototype库无法访问iframe中的任何内容。
我找到了一些解决方法(例如example),但没有人提供对protytpe / iframe的完全支持。有谁知道这样做的方法吗?
PS:不使用iframe不是一种选择:)
答案 0 :(得分:9)
如果您想在不同文档中使用Prototype - 并且iframe是不同的文档 - 您必须在每个文档中包含该脚本,并使用正确的副本访问相关文档。
jQuery和任何其他直接引用document
的框架也是如此。库的每个实例都与其自己的document
对象相关联。因此,当您从父脚本创建元素时,其ownerDocument
是父窗口。尝试将该元素附加到iframe文档中,您应该获得DOMException.WRONG_DOCUMENT_ERR。
var iframe= $('myiframe');
// get window and document objects for iframe (IE compatible)
var idoc= iframe.contentDocument || iframe.contentWindow.document;
var iwin= iframe.contentWindow || iframe.contentDocument.defaultView;
Element.extend(idoc);
idoc.body.insert('<div>hello</div>'); // fail, wrong document
iwin.Element.extend(idoc); // use the copy of Prototype in the iframe's window
idoc.body.insert('<div>hello</div>'); // ok
(请注意,在Firefox中你实际上不会得到一个WRONG_DOCUMENT_ERR,因为他们会默默地为你修复这个错误。但更复杂的操作会很快让你处于奇怪的,不一致的状态。)
大多数JS库旨在简化单文档脚本;它们隐藏了DOM操作中涉及的大部分血腥细节,其中一种方法就是忽略document
对象。但是,这使得它们不太适合跨文档脚本,在那里知道使用哪个document
是至关重要的。
跨文档脚本已经令人困惑。使用一个不是专门用来处理它的JS框架(我不知道那个)只会使生活更加怪异。