弹出iframe内嵌页面元素到父页面并全屏化

(注册博客好久了,一直没舍得添砖加瓦,主要是每次想写点东西的时候,随便搜一搜发现都比我总结的都要好,甚感尴尬,但是总是要开始的,所以这就是我的第一篇博客,也绝不会是最后一篇,废话不多说,直接入正题)

 

iframe和弹窗这些词对于js高手来说都是耳熟能详的东西,作为一个新人来说,还在学习阶段的我就在工作中遇到这么一个奇葩的需求,要在引入的iframe页面里做一个全屏化的功能.

粗略一看,这还不容易,模拟下F11的功能键什么的,于是网上一搜还真有一大堆关于全屏化的案例,遂借来用之.

然后高高兴兴的拿一个没有iframe引入的页面做了个测试页面查看全屏化功能效果,代码如下(fullScreenPage.html):

 1 DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title>Control Towertitle>
 5     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 6 head>
 7 <body style="margin: 0px;height: 100%;width: 100%;">
 8     <div id="buttonPanel" style="position: absolute;left: 25%;z-index:100">
 9         <input id="full_screen_open" type="button" value="打开全屏">
10         <input id="full_screen_close" type="button" value="退出全屏" style="display: none">
11     div>
12     <div id="container" style="display:table;height: 50%;width: 50%;background-color: #004981;position:absolute;left: 25%;">
13         <div style="display:table-cell;height: 50%;width: 50%;text-align: center;vertical-align: middle;border: 2px solid #DDDDDD;">
14             <font id="font" size="30">font>
15         div>
16     div>
17 body>
18 <script src="./scripts/jquery/jquery-1.11.3.js" type="text/javascript">script>
19 <script type="text/javascript">
20 $("#full_screen_open").on("click",function(){
21     requestFullScreen($("#container")['0']);
22     $("#font").empty();
23     $("#font").text("已打开全屏化");
24 });
25 var requestFullScreen = function(element) {
26     var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen;
27     if (requestMethod) {
28         requestMethod.call(element);
29     } else if (typeof window.ActiveXObject !== "undefined") {
30         var wscript = new ActiveXObject("WScript.Shell");
31         if (wscript !== null) {
32             wscript.SendKeys("{F11}");
33         }
34     }
35 }
36 script>
37 html>

嗯,我自己觉得这个效果真的是不要太棒了,还做了浏览器兼容(FireFox=mozRequestFullScreen;W3C=requestFullscreen;Chrome等=webkitRequestFullScreen;ie11=msRequestFullscreen).....

于是,我立马放到项目里,结果是什么样子呢?执行下面的代码(parentPage.html)就知道了....

 1 DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title>Control Towertitle>
 5     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 6 head>
 7 <body style="margin: 0px;height: 100%;width: 100%;">
 8     <div id="parentContainer" style="height: 75%;width: 75%;position:absolute;left: 12.5%;border: 2px solid red;">
 9         
10         <iframe src="fullScreenPage.html" style="border: 2px solid blue;height: 100%;width: 100%;">iframe>
11     div>
12 body>
13 html>

哦豁,好像没生效,那么为什么呢?

很明显没有起作用,那么怎么办呢?既然引入的子页面iframe不生效,是不是从父页面或许就可以了?

那就赶紧试试找到父类并执行全屏功能,把页面(fullScreenPage.html)改一改,代码如下:

 1 DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title>Control Towertitle>
 5     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 6 head>
 7 <body style="margin: 0px;height: 100%;width: 100%;">
 8     <div id="buttonPanel" style="position: absolute;left: 25%;z-index:100">
 9         <input id="full_screen_open" type="button" value="打开全屏">
10         <input id="full_screen_close" type="button" value="退出全屏" style="display: none">
11     div>
12     <div id="container" style="display:table;height: 50%;width: 50%;background-color: #004981;position:absolute;left: 25%;">
13         <div style="display:table-cell;height: 50%;width: 50%;text-align: center;vertical-align: middle;border: 2px solid #DDDDDD;">
14             <font id="font" size="30">font>
15         div>
16     div>
17 body>
18 <script src="./scripts/jquery/jquery-1.11.3.js" type="text/javascript">script>
19 <script type="text/javascript">
20 $("#full_screen_open").on("click",function(){
21     /* 获取父类的document */
22     var parentDoc = parent.document;
23     /* 定义一个接收元素的变量 */
24     var thisIframe = null;
25     /* 用jQuery遍历父类的所有iframe,找到我引入的那个iframe,
26           假设我不知道是哪个页面要引入我的iframe,但是引入我的iframe的src肯定会有引入这个页面的名字,
27           所以通过这个去检索,一定能找到引入这个页面的iframe,然后把这个iframe的元素全屏化也就是把原来的页面全屏化 */
28     $("iframe",window.parent.document).each(function(index,e){
29         if (e.src.indexOf("fullScreenPage.html") > 0) {
30             thisIframe = e;
31             return false;
32         }
33     });
34     requestFullScreen(thisIframe);
35     $("#font").empty();
36     $("#font").text("已打开全屏化");
37 });
38 var requestFullScreen = function(element) {
39     var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen;
40     if (requestMethod) {
41         requestMethod.call(element);
42     } else if (typeof window.ActiveXObject !== "undefined") {
43         var wscript = new ActiveXObject("WScript.Shell");
44         if (wscript !== null) {
45             wscript.SendKeys("{F11}");
46         }
47     }
48 }
49 script>
50 html>

 

哈哈,改了之后发现果然可以了,问题解决。

jQuery还请自行下载并导入引用,我这里就不细说了.

这里分享一个jQuery下载的地址:jquery下载所有版本(实时更新)

 

你可能感兴趣的:(前端,iframe,弹出窗口,全屏)