html iframe使用的实战总结分享

说在前面的话,iframe是可以做很多事情的。
例如:
a>通过iframe实现跨域;
b>使用iframe解决ie6下select遮挡不住的问题
c>通过iframe解决ajax的前进后退问题
d>通过iframe实现异步上传。(easyui中form组件就是用的iframe,实现表单提交时,可以提交上传域)
下面就一些问题一一论述。

1、iframe基本知识:

iframe 元素会创建包含另外一个文档的内联框架(即行内框架)。
在 HTML 4.1 Strict DTD 和 XHTML 1.0 Strict DTD 中,不支持 iframe 元素。
提示:您可以把需要的文本放置在 之间,这样就可以应对无法理解 iframe 的浏览器。


可选属性:

html iframe使用的实战总结分享

标准属性:

html iframe使用的实战总结分享

 

立即学习“前端免费学习笔记(深入)”;

2、操作iframe:

   注:测试环境IE:8.0,FF:23.0.1   a>隐藏iframe表框i>标签中设置:frameborder="0",ii>DOM操作:var myiframe = document.getElementById("myiframe");myiframe.style.border="none";//FF下有效,IE下无效 myiframe.setAttribute("frameborder",0);//FF下有效,IE下无效 myiframe.frameBorder = 0;//FF下有效,IE下无效    b>动态创建iframe   var newFrame = document.createElement("iframe");newFrame.src ="http://blog.csdn.net/cuew1987";newFrame.frameBorder = 0;//FF、IE隐藏边框有效newFrame.width = "400px";newFrame.height = "400px";newFrame.scrolling = "no";document.body.appendChild(newFrame);      c>获取iframei>var obj = document.getElementById("iframeID");  获取iframe对象,可直接操作iframe标签属性,如只想改变iframe的 src 或者 border ,scrolling 等attributesii>var dom = frames["iframeName"];   获取iframe的DOM对象,此对象可用来操作对象,比如想操作iframe页面中的元素。    d>获取iframe中的window对象function getIframeWindow(obj) {//IE || w3creturn obj.contentWindow || obj.contentDocument.parentWindow;//parentWindow 是 parent window object}document.getElementById取到的iframe是不能直接操作里面的document的,只能这样取:IE:frames[id].document或obj.contentWindow.document;FF:dom.contentDocument或obj.contentDocument;不绑定任何事件.e>获取iframe页面高度function getIframeHeight(obj){var idoc = getIframeWindow(obj).document; if(idoc.body){return Math.max(idoc.body.scrollHeight,idoc.body.offsetHeight);   }else if(idoc.documentElement){return Math.max(idoc.documentElement.scrollHeight,idoc.documentElement.offsetHeight);   }}f>父子页面互访i>子访问父:parent.html:

等到的信息:

son.html:function setMsg(){var msg = window.parent.document.getElementById("msg");msg.innerHTML= "Hello world!!";}ii>父访问子:parent.html:

等到的信息:


function setMsg(){var obj = document.getElementById("myiframe");var msg = getIframeWindow(obj).document.getElementById("msg");document.getElementById("setMsg").innerHTML = msg.innerHTML;}son.html:

Hello world!!!

3.iframe高度自适应和跨域:

实际使用iframe中,会遇到iframe高度的问题,由于被嵌套的页面长度不固定而显示出来的滚动条,不仅影响美观,还会对用户操作带来不便a>同域下的高度自适应parent.html:  function getIframeWindow(obj) {return obj.contentWindow || obj.contentDocument.parentWindow;}function getIframeHeight(obj){var idoc = getIframeWindow(obj).document; if(idoc.body){return Math.max(idoc.body.scrollHeight,idoc.body.offsetHeight);   }else if(idoc.documentElement){return Math.max(idoc.documentElement.scrollHeight,idoc.documentElement.offsetHeight);   }}function setHeight(){   var myiframe = document.getElementById("myiframe");myiframe.height = getIframeHeight(myiframe);}  另:document.documentElement与document.body相关说明(W3C DOM2.0规范)document.doucmentElement:documentElement of type Element, readonly,This is a convenience attribute that allows direct access to the child node that is the root element of the document. For HTML documents, this is the element with the tagName "HTML".document.body:document.body is the element that contains the content for the document. In documents with  contents, returns the  element, and in frameset documents, this returns the outermost  element.Though body is settable, setting a new body on a document will effectively remove all the current children of the existing  element.IE在怪异模型(Quicks Mode)下document.documentElement无法正确取到clietHeight scrollHeight等值,比如clientHeight=0。获取scrollTop:var sTop=Math.max((document.body?document.body.scrollTop:0),(document.documentElement?document.documentElement.scrollTop:0),(window.pageYOffset?window.pageYOffset:0));    b>跨域下高度自适应页面:index.html:(http://www.csdn.net)son.html:function getHeight(){var idoc = document; if(idoc.body){return Math.max(idoc.body.scrollHeight,idoc.body.offsetHeight);   }else if(idoc.documentElement){return Math.max(idoc.documentElement.scrollHeight,idoc.documentElement.offsetHeight);   }}window.onload = function(){var h = getHeight();document.getElementById("agentIframe").src="http://www.csdn.net#"+h;}agent.html:(http://www.csdn.net)(function(){var con = parent.parent.document.getElementById('frame_content');     var href = parent.parent.frames["frame_content"].frames["iframeC"].location.hash;      con.style.height = href.split("#")[1]+"px";})();

4.iframe背景透明:

在ie6/7/8下引入iframe的时候,它的背景默认是白色,即使设置了style=”background-color:transparent;”也无效,
但是其他浏览器(firefox,chrome,opera,ie9)都正常显示,要解决这个兼容性问题,必须用到一个属性。
下面来看看现象:

index.html:

结果如下图:(FF中有滚动条是因为在index.html中设置了有滚动条)

html iframe使用的实战总结分享

解决:
给iframe设置属性:allowTransparency=”true” //设置为true允许透明


备注:iframe不设置此属性时,可使用iframe解决在IE6、7环境中遮住select

5.判断页面中是否有iframe:

a>首先来看看window.frameElement这个属性。返回嵌入当前window对象的元素(比如  或者 ),即为包含本页面的iframe或frame对象。如果当前window对象已经是顶层窗口,则返回null.看看一个例子:parent.html:son.html:(注意frameElement用在son.html中,如果用在parent.html中,则返回null)

Hello world!!!

var iframe = window.frameElement;if(iframe){iframe.src = "http://blog.csdn.net/cuew1987";}备注:虽然该属性名为frameElement,但该属性也会返回其他类型比如 或者其他可嵌入窗口的元素.b>兼容性如下图:

html iframe使用的实战总结分享

c>定义函数:i>判断父页面中是否含有iframefunction hasIframe(){return document.getElementsByTagName("iframe").length > 0;}ii>判断某个页面是否在iframe标签中function innerIframe(){var iframe = window.frameElement;if(iframe){return typeof iframe !== "undefined";}}

6、HTML5中iframe:

HTML 4.01 与 HTML 5 之间的差异在 HTML 5 中,仅仅支持 src 属性

HTML5中全局属性:

html iframe使用的实战总结分享

7、easyui中form组件提交(包括上传域):

function submitForm(target, options) {options = options || {};if (options.onSubmit) {if (options.onSubmit.call(target) == false) {return;}}var form = $(target);if (options.url) {form.attr("action", options.url);}var frameId = "easyui_frame_" + (new Date().getTime());var frame = $("").attr("src",window.ActiveXObject ? "javascript:false" : "about:blank").css({position : "absolute",top : -1000,left : -1000});var t = form.attr("target"), a = form.attr("action");form.attr("target", frameId);//在iframe中提交表单try {frame.appendTo("body");frame.bind("load", cb);form[0].submit();} finally {form.attr("action", a);t ? form.attr("target", t) : form.removeAttr("target");}var checkCount = 10;function cb() {frame.unbind();var body = $("#" + frameId).contents().find("body");//contents()查找匹配元素内部所有的子节点(包括文本节点)。如果元素是一个iframe,则查找文档内容var data = body.html();if (data == "") {if (--checkCount) {setTimeout(cb, 100);return;}return;}var ta = body.find(">textarea");if (ta.length) {data = ta.val();} else {var pre = body.find(">pre");if (pre.length) {data = pre.html();}}if (options.success) {options.success(data);}setTimeout(function() {frame.unbind();frame.remove();}, 100);};};另:form 的target属性:a>HTML4中:定义和用法:target 属性规定在何处打开 action URL。兼容性:在 HTML 4.01 中,不赞成使用 form 元素的 target 属性;在 XHTML 1.0 Strict DTD 中,不支持该属性。属性值:_blank 新窗口中打开_self  默认,在相同的框架中打开_parent 父框架中打开_top    整个窗口中打开framename  指定的frame name属性值的框架中打开b>HTML5中:HTML 4.01 与 HTML 5 之间的差异在 HTML5 中 target 属性不再是被废弃的属性。不再支持 frame 和 frameset。现在,parent, top 和 framename 值大多用于 iframe。

8、网上问题收集:

a>window.frameElement在chrome下undefined?

问题描述:
今天在重新编写我的日历组件的时候,由于用到使用iframe自定义属性传值,
将父页面的值写在iframe 自定义属性上,然后在iframe页面中使用 window.frameElement.getAttribute() 获取,
奇怪的是之前编写的日历控件代码一直都这样写,没有发生过错误,但是今天在chrome里面 window.frameElement 竟然是 undefined,
在firefox 甚至IE6下都没有问题,后来百度没有答案, 再google 也,没有答案。
解决:
最后自己根据以往经验想到或许是本地调试权限问题,于是打开apache使用域名的形式访问,果然可以了,呵呵!

以上就是html iframe使用的实战总结分享的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1544762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 16:11:14
下一篇 2025年12月21日 16:11:27

相关推荐

  • html中iframe签的作用以及使用技巧详解

    纵观时下网站,本来网速就有些慢,可是几乎每页都要放什么banner,栏目图片,版权等一大堆雷同的东西,当然,出于网站风格统一、广告效应的需要,本无可厚非,可毕竟让用户的钱包为这些“点缀“的东西”日益消得钱憔悴”了,有没有办法,让这些雷同的东西一次下载后就不用再下载,而只下载那些内容有变化区域的网页内…

    好文分享 2025年12月21日
    000
  • 关于html滚动条样式的使用以及示例代码分享

    html中滚动条属性设置scrollbar属性、样式详解1、 overflow内容溢出时的设置(设定被设定对象是否显示滚动条)    overflow-x水平方向内容溢出时的设置    overflow-y垂直方向内容溢出时的设置    以上三个属性设置的值为visible(默认值)、scroll、…

    好文分享 2025年12月21日
    000
  • html中关于div滚动条样式设计的实例

    html中关于div滚动条样式设计的实例 ::-webkit-scrollbar-track-piece{background-color:#fff;/*滚动条的背景颜色*/-webkit-border-radius:0;/*滚动条的圆角宽度*/}::-webkit-scrollbar{width:…

    好文分享 2025年12月21日
    000
  • html如何强制显示以及隐藏浏览器的滚动条

    刚在做个网站,有个页面与其他页面显示有点出入, 通过观察和调试,发现是该页面的垂直高度未溢出, 无法调用出垂直滚动条, 从而导致相对于其他页面居中时相差几个像素距离, 使得页面效果不够友好。 立即学习“前端免费学习笔记(深入)”; 解决方案:将所有页面强制添加或者隐藏浏览器的滚动条即可。 相关…

    好文分享 2025年12月21日
    000
  • html如何实现隐藏滚动条但可以滚动的示例代码

    代码:(原理就是遮盖) .scroll{ overflow-x: hidden; overflow-y: auto; } .scroll-son{ overflow-x: hidden; } 1立即学习“前端免费学习笔记(深入)”; Designify 拖入图片便可自动去除背景✨ 90 查看详情 1…

    2025年12月21日
    000
  • html中5种空格表示的具体分析

    HTML提供了5种空格实体(space entity),它们拥有不同的宽度,非断行空格( )是常规空格的宽度,可运行于所有主流浏览器。其他几种空格(       ‌‍)在不同浏览器中宽度各异。               它叫不换行空格,全称No-Break Space,它是最常见和我们使用最多的空…

    好文分享 2025年12月21日
    000
  • javascript如何实现表单验证_有哪些最佳实践

    JavaScript表单验证核心是提交前快速反馈错误以提升体验,但不可替代后端校验;需结合原生API、解耦规则、无障碍支持及前后端协同。 JavaScript 表单验证的核心目标是:在用户提交前快速反馈错误,提升体验,同时不能替代后端校验。实现上应兼顾即时性、可访问性与健壮性,而非仅靠 onsubm…

    2025年12月21日
    000
  • javascript如何实现拖放功能_相关的事件有哪些

    关键拖放事件包括源元素的dragstart、drag、dragend和目标元素的dragenter、dragover、dragleave、drop;需设置draggable=”true”,在dragstart中setData,在dragover中preventDefault,…

    2025年12月21日 好文分享
    000
  • 如何用javascript实现懒加载_有哪些技术方案?

    懒加载核心是按需加载,推荐使用Intersection Observer API实现,辅以loading=”lazy”渐进增强;老项目兼容IE可降级为节流滚动监听;框架中宜封装为Hook或指令,避免关键内容懒加载。 懒加载(Lazy Loading)的核心是“按需加载”,即当…

    2025年12月21日
    000
  • javascript如何操作iframe_如何安全地进行跨域通信

    JavaScript操作iframe需分同源与跨域:同源时用contentWindow直接访问DOM或调用函数,须等load事件;跨域唯一安全方式是postMessage,需校验origin、约定消息结构并支持双向通信。 JavaScript 操作 iframe 的核心在于正确访问其内容,而跨域通信…

    2025年12月21日
    000
  • 如何使用javascript操作DOM_常见方法有哪些?

    JavaScript操作DOM的核心是通过内置API获取、修改、添加或删除页面元素;常用方法包括getElementById、querySelector、innerHTML、classList、createElement、addEventListener等,配合事件委托可高效实现动态交互。 Java…

    2025年12月21日
    000
  • 如何实现JavaScript验证表单_前端验证的最佳实践是什么

    JavaScript表单验证核心是提升体验与保障基础数据质量,但不可替代后端验证;需结合HTML5原生属性与JS增强交互,确保提示清晰可访问,并始终信任后端校验。 JavaScript 表单验证的核心目标是提升用户体验和保障基础数据质量,但它不能替代后端验证。前端验证应快速反馈、友好提示、不干扰正常…

    2025年12月21日
    000
  • javascript标签模板是什么_它如何解析模板字符串?

    标签模板是JavaScript中通过函数处理模板字符串的语法,首参为静态字符串数组,后续参数为插值表达式结果,常用于HTML转义、SQL参数化等场景。 JavaScript 标签模板(Tagged Templates)是一种函数调用语法,允许你用自定义逻辑处理模板字符串,而不是直接拼接成普通字符串。…

    2025年12月21日
    000
  • javascript CSP策略是什么_如何防止跨站脚本攻击?

    CSP是一种浏览器强制执行的白名单式安全策略,通过HTTP头或meta标签限制资源加载以防止XSS。需禁用内联脚本与eval、改用事件监听、显式声明第三方域名,并配合服务端转义等其他防护措施。 JavaScript CSP(Content Security Policy,内容安全策略)是一种浏览器安…

    2025年12月21日
    000
  • JavaScript服务端渲染_javascriptSEO优化

    服务端渲染(SSR)通过在服务器端生成完整HTML,使搜索引擎爬虫无需执行JavaScript即可抓取页面内容,从而提升JavaScript应用的SEO效果。Next.js、Nuxt.js等主流框架提供开箱即用的SSR支持,结合动态title与meta标签、语义化结构、Open Graph标签及si…

    2025年12月21日
    000
  • javascript的SEO优化有哪些方法_如何让单页应用被搜索引擎收录

    单页应用(SPA)需通过服务端渲染(SSR)、预渲染或动态渲染使爬虫获取完整HTML,辅以语义化标签、动态元信息、规范路由及Sitemap等基础SEO实践来提升搜索引擎收录效果。 单页应用(SPA)默认对搜索引擎不友好,因为传统爬虫难以执行 JavaScript 渲染页面内容。要让搜索引擎收录 SP…

    2025年12月21日
    000
  • javascript的Web API是什么_如何与浏览器功能交互?

    JavaScript的Web API是浏览器提供的接口,用于调用内置功能,如DOM操作、Fetch网络请求、Storage数据存储、Geolocation定位、Canvas绘图等,非JS语言原生部分,受同源策略和权限限制。 JavaScript 的 Web API 是浏览器提供的一套接口,让你的代码…

    2025年12月21日
    000
  • 如何在javascript中操作DOM_有哪些高效的选择器可以使用?

    JavaScript DOM操作核心是先选中元素再增删改查,推荐使用getElementById、querySelector、querySelectorAll等高效选择器,并通过缓存元素、使用classList、DocumentFragment和事件委托提升性能与安全性。 在 JavaScript …

    2025年12月21日
    000
  • 如何在javascript中实现颜色选择器_有哪些调色板方案?

    JavaScript实现颜色选择器核心是监听交互并实时计算规范颜色值;可用原生input或Canvas自绘HSV/HSL控件,需归一化处理后转CSS格式;推荐vanilla-picker等轻量库避免手写色彩转换逻辑。 JavaScript 中实现颜色选择器,核心是监听用户交互(如滑块拖动、色盘点击、…

    2025年12月21日
    000
  • javascript_网络安全防护措施

    防范JavaScript安全风险需从XSS、CSRF、第三方依赖和运行时控制入手:1. 通过输入转义、安全API和CSP防御XSS;2. 使用SameSite Cookie、CSRF Token防止跨站请求伪造;3. 定期审计依赖、最小化外部脚本引入;4. 禁用eval、启用SRI、监控异常行为,结…

    2025年12月21日
    000

发表回复

登录后才能评论
关注微信