全国统一热线:
028-86758058
18980748058
购买流程
付款方式
常见问题
在线提问
续租服务
购物车(
0
件)
用户名:
密 码:
记住
首 页
HOME
域名注册
DOMAIN
虚拟主机
WEB HOST
成品网站超市
AUTO Site
VPS主机
VPS SERVER
云 主 机
CLOUD HOST
租用托管
SERVER
海外主机
HK HOST
代理专区
AGENT
客服中心
SERVICE
站长教程
SERVICE
欢迎光临西部数据云计算中心,我们将竭诚为您提供最优质的服务!
中文域名
域名转入
域名转出
DNS管理
动态域名
获取域名证书
域名停放
域名过户
集群主机
双线主机
基本主机
港台主机
论坛主机
Linux主机
Vip合租主机
超G型主机
ASP.net主机
Java主机
智能建站主机
网店主机
美国主机
数据库
成品网站超市
智能建站主机
集群VPS主机
国内VPS主机
香港VPS主机
美国VPS主机
云主机介绍
云主机购买
服务器租用
主机托管
常见问题
香港主机
港台主机
美国主机
国内免备案
步骤流程
代理级别
代理合同
代理模式
代理优势
在线申请
产品列表
常见问题
代理商分布图
常见问题
有问必答
跟踪提问
购买流程
产品价格
付款方式
常用软件
网站备案
续租服务
汇款确认
相关文档
联系我们
域名资讯
主机资讯
行业动态
网页制作
php教程
mysql教程
域名资讯
云计算资讯
网络编程
您当前的位置:
首页
>
网络编程
>
网站制作
iframe节点初始化的问题探讨
时间:1970-01-01 来源:互联网 作者:佚名
今天忽然想着复习一下富文本编辑器的制作原理。于是二话不说将手把手地做了起来。因为一年前写过一个简单的富文本编辑器,所以大概还是有点印象。可是当我把写出来的代码跑一下的时候,发现了问题:
复制代码
代码如下:
var ifr = document.createElement('iframe');
ifr.width = 300;
ifr.height = 300;
var idoc = ifr.contentDocument || ifr.contentWindow.document;
idoc.designMode = 'on';
idoc.contentEditable = true;
idoc.write('<html><head><style>body{ margin:0px; }</style></head><body></body></html>');
document.body.appendChild(ifr);
大家看看上面的代码,有没有发现哪里出现了批漏?
我想如果没有和我有类似经历的童鞋估计是看不出这段代码有什么问题的。那么大家不妨去跑一下,也许你很快就会发现问题。
下面由我来揭晓答案:
这段代码会抛找不到对象的异常。找不到哪个对象?找不到document对象,啥?怎么可能找不到document对象?当然,这个document对象是iframe的document对象。做过富文本的都知道要先获取了iframe的document对象才可以设置为可编辑。但是为什么我们获取不了document对象呢?这里我就不卖关子了。我说说我的解决流程吧。
首先我去谷歌了一下发现我获取document的写法是没有错的。然后我在想难道是Chrome的原因?难道Chrome抽风不支持这两个对象?于是换到了Firefox。结果还是一样。那么可以肯定的是,肯定是自己的代码问题。
后来通过对比网上的代码,发现自己的appendChild位置有点不对,于是乎就将它提前到了获取document对象前:
复制代码
代码如下:
var ifr = document.createElement('iframe');
ifr.width = 300;
ifr.height = 300;
document.body.appendChild(ifr);
var idoc = ifr.contentDocument || ifr.contentWindow.document;
idoc.designMode = 'on';
idoc.contentEditable = true;
idoc.write('<html><head><style>body{ margin:3px; word-wrap:break-word; word-break: break-all; }</style></head><body></body></html>');
结果运行一切顺利。然后我对此次的错误作了分析。其实这个错误的原理很简单。大家都知道iframe其实里面包含的是另一个文档,而这个文档只有初始化了才能拥有一个document对象。而如果没有把iframe元素加入到DOM树中,iframe中的文档是不会初始化的。因此,在一开始我们的代码里,我们获取的ifr变量中的contentDocument值是null,也就说明了此时iframe中的文档没有初始化。
顺着这条线,我再检查了别的节点的初始化情况,发现其实别的元素节点只要一旦创建,无论是否加入到DOM树中都会拥有其本身的属性和方法。也就是说在众多元素节点中iframe算是个异类吧。
来顶一下
返回首页
推荐资讯
从零开始学ASP.NET-基础篇第1/7页
第一天 学习目的: 掌握最基本的Label、TextBox、Button控件
ASP.NET入门数据篇
对于网站编程的初学者来说,总是会上网找些源码来看,但久而
相关文章
Effective C# 使用成员初始化器而不是赋值语句
ConfiguraionSource节点及多个配置文件的应用
C# XML操作 代码大全(读XML,写XML,更新,删除节点,与da
asp.net Linq To Xml上手Descendants、Elements遍历节
asp.net 文件上传与刷新与asp.net页面与iframe之间的数
asp.net 获取TreeView中第一个选中的节点
xpath的数据和节点类型以及XPath中节点匹配的基本方法
VS初始化命令 ASP.NET常用技巧
ASP.NET页面借助IFrame提交表单数据所遇到问题的解决方
ASP.NET中使用IFRAME建立类Modal窗口
栏目更新
栏目热门
返回首页
关于我们
联系我们
付款方式
价格总览
资讯中心
友情链接
媒体关注
有问必答
投诉建议
网站备案
《中华人民共和国增值电信业务经营许可证》编号:川B2-20080058号
官方网址:
xibushuju.com
西部数据
Copyright © 2002~2015
天府快车
版权所有
电话总机:
028-86758058
(50线) 传真:
028-86758058