在我自己的日常前端开发中,其实iframe标签出现的次数并不是很多。作为一个很古老(浏览器兼容性非常好)的标签,有必要去了解一下它的典型应用场景。

(图片说明:所有浏览器都支持iframe,无论什么版本)

在什么情况下使用iframe呢?其实iframe有很多奇技淫巧的用法,但是最重要的一个特点是:<iframe>提供了一个和浏览器当前窗口相隔离的沙箱环境,相当于网页内部新开的另一个窗口。<iframe>外部的css/javascript,不会影响到<iframe>里面的样式或DOM。同时,<iframe>内部的css/javascript也不会影响<iframe>外部的样式和DOM。因此,iframe可以用于引用站外的网页。常用于CMS系统,富文本编辑器等场景。

我们常用的在线执行前端代码的网站,例如 http://jsfiddle.net/ , 以及新手常用的 http://www.w3school.com.cn/ 里面的“亲自试一试”功能,其实都是使用了<iframe>标签来实现。接下来就以w3school来举个例子。

我们在左边编辑页面,点击提交代码之后,就可以在右侧查看到效果了。试想一下,右边“查看结果”区域就是一个iframe,提供了一个隔离于当前网页的环境。否则的话,我们在左侧设置了<p>标签背景为红色,如果没有iframe,那么整个网页上的p元素可能都会变成红色。

我们查看该网页的源代码其实可以看出这个页面的工作原理。我去掉了一些多余的代码和html标签,最核心的部分如下:

执行的流程如下:

1. 用户点击了提交按钮,执行submitTryIt函数

2. 在submitTryIt函数中,先获取到编辑html区域(即用户自己编辑的区域)的值,并赋值给隐藏的中转区域

3. submitTryIt中执行表单提交操作(即submit函数),将隐藏的中转区域里面的内容(即用户自己编辑的区域内容)传到了后台接口v.asp

4. 表单提交到v.asp这个链接之后,返回了什么呢?其实,并没有做任何处理,原封不动的返回了。如下图:

5. 这个时候你一定奇怪,原封不动返回的内容,为什么会在“查看结果”区域(即iframe里面)执行出效果来?重点来了,请注意<form>标签上有个属性target="i",而<iframe>标签上也有一个属性叫做name="i",他们两个属性都叫做字母“i”,可不是作者瞎写的。这个的意思是说,将form表单提交,返回的结果提交到以target的值为name的窗口中。关于form表单的target值,可以参考这里:http://www.w3school.com.cn/tags/att_form_target.asp 。这就解释了为什么返回的内容可以在iframe里面展示出来了。由于iframe的隔离性,你不管提交什么代码,都只能影响到iframe里面的区域,不会影响到页面上其他部分。

本文的最后,顺便提一个问题,既然iframe有这么好的隔离性,如果我真的要和iframe里面的内容做通信或其他交互,应该怎么办呢?有兴趣的话大家调研一下吧~postmessage

HTML的iframe标签妙用 - 在线执行前端代码的网站原理是什么?的更多相关文章

  1. 发现一个可以在线运行JS代码的网站

    平时可以在这里玩 http://jsbin.com/

  2. 两个在线编写C++代码的网站

    第一个支持的编程语言很多,首推 http://ideone.com/ 第二个简单了点,不过可以通过email分享给朋友 http://codepad.org/ 试一试,可以用这两个网站提高自己编写代码 ...

  3. 代码在线执行工具(PHP,Java,C++ 等)

    http://www.it1352.com/Onlinetools 支持几十种语言的在线运行. 缺点:对请求频率限制太严格了,一分钟不到十次吧...可以清理浏览器 Cookie 之后重新访问.必须用示 ...

  4. QQ,MSN,Skype在线客服代码

    QQ,MSN,Skype在线客服代码 在网站建设时,为了更好的实施网站的营销型,会用到QQ,MSN等在线交流,以便客户能够快捷方便的联系我们.在这里,提供QQ,MSN的在线客服代码给大家分享: 1.Q ...

  5. iframe标签flash遮盖页面元素问题——wmode参数

    最近做项目过程中,遇到各种小问题,所以打算通过博客园来记录各问题的解决办法. 这篇的问题背景是这样子的:项目是用的AngularJS框架,在某个页面上用了wangEditor富文本编辑器插件(gith ...

  6. 【Egret】里使用iframe标签达到内嵌多个web界面

    目的:Egret里使用iframe标签达到内嵌多个web界面,模式相当于主swf调用N个子swf的效果: 目前在做项目过程中,在使用iframe的时候,碰到了一些功能需求,以及解决方法如下: 一..在 ...

  7. django2 用iframe标签完成 网页内嵌播放b站视频功能

    前言: 给自己的网站中加入视频资源,有两种方法,一种是用iframe标签引用外站资源,另一种则使用video标签,获取站内资源进行视频播放.其中前者顾名思义,是将视频资源上传到视频网站中,然后通过引用 ...

  8. iframe标签

    转载文章:Web前端之iframe详解 iframe基本内涵 通常我们使用iframe直接在页面嵌套iframe标签指定src就可以了. <iframe src="demo_ifram ...

  9. 通过iframe标签绕过csp

    iframe.php代码如下: allow-popups开启时,window.open就可以打开新的窗口. 看csp规则,默认是在当前域内,如果这是一个ctf题的话,就很简单了,window.loca ...

随机推荐

  1. MongoDB覆盖索引查询

    官方的MongoDB的文档中说明,覆盖查询是以下的查询: 1. 所有的查询字段是索引的一部分 2. 所有的查询返回字段在同一个索引中 由于所有出现在查询中的字段是索引的一部分, MongoDB 无需在 ...

  2. 用linux文件处理三剑客将微信群成员导出的方法

    工具: Mac/Linux 系统 Chrome Linux命令:vi.cat. wc. grep. awk. sed.sort. uniq 步骤: 1.微信网页版登陆: https://wx.qq.c ...

  3. python函数说明内容格式错误

    def levlTwo(levloneList,levlOneNum): """ 入参levloneList 一级城市列表 入参levlOneNum 用户选择的城市序号 ...

  4. Ubuntu下OpenGL开发环境的搭建

    由于上了计算机图形学的课,老师叫我们安装OpenGL开发环境,晚上安装了一两个小时,终于搞定了. 1.      建立基本编译环境 sudo apt-get install build-essenti ...

  5. 前端菜鸟学习之DOM事件处理

    一.事件处理程序 1.DOM0级事件处理程序:就是将一个函数赋值给一个事件处理程序属性,至今仍为现代所有浏览器所支持,主要得益于其跨浏览器的优势,要使用DOM0级事件 首先要得到操作对象的引用,具体实 ...

  6. lua State加载部分库

    lua State加载部分库 在lua中,通常我们用luaL_openlibs(L)加载所有的lub标准库,但是有时候我们想只加载部分,有没有什么好的办法呢?在luaproc看到如下办法: stati ...

  7. Problem P

    题意:FJ养牛,他想知道中间的牛是那一头: 思路:这道题有点水,思路就不写了 #include #include #include #define maxn 10005 using namespace ...

  8. Pie

    Problem Description My birthday is coming up and traditionally I'm serving pie. Not just one pie, no ...

  9. Max Sum Plus Plus

    A - Max Sum Plus Plus Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I6 ...

  10. SQLAlchemy复杂查询

    最近个人用python + flask搞了一个小项目,ORM用到的是SQLAlchemy.   SQLAlchemy的查询方式非常灵活,你所能想像到的复杂SQL 语句,基本上都可以实现.这里简单的总结 ...