分享 通过 iframe 中的元素获得其父级 document .

ichord · 2014年01月23日 · 最后由 ichord 回复于 2014年01月23日 · 1957 次阅读

最近我维护的 At.js 项目上有人反映说其不能直接在 iframe 中工作,需要 hack (将整个插件载入 iframe). 但是很多所见即所得编辑器都是使用 iframe 的,比如 ckeditor. 如果能默认支持最好了。

一般想到的方法就是让用户传入 iframe 对象即可,然后所有工作基于 iframe.contentDocument 工作就好了. 但是我不想在 At.js 里加多这么一个参数,于是我找到了一比较好的解决方法 (兼容 IE):

通过 iframe 中的元素获得 iframe 的父级元素的 document 对象

如此一来就不用改变任何接口即可兼容 iframe 的情况。方法很简单,直接上代码:

inputor = iframeX.contentDocument.getElementById('inputor')
oDocument = inputor.ownerDocument
// parentWindow - IE
oWindow = oDocument.defaultView || oDocument.parentWindow
/**
这个方法也挺有意思的, 可以反过来获得该 iframe. 
At.js 需要获得 iframe 的 offset
**/
oFrame = oWindow.frameElement

PS. 我总觉得在 ruby 社区发些前端的东西挺别扭的。不知各位有啥意见没。 另外,这个是之前想分享但没有发的遗留下来的 (论坛保存了 draft....). 所以现在就简短的写写好了。我准备发另一个主题的东西 😄

从 star 数看 at.js 已经是流行项目了啊

@Rei 有一段被在 github 上刷屏的经历。😄 我最近打算写写关于维护这个项目的一些小事情的文章里会提到。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号