Iframe 在项目中的使用总结
参考:http://www.cnblogs.com/MaxIE/archive/2008/08/13/1266597.html
问题一:首先我们用iframe加载页面,第一个需要解决的问题是高度自适应的问题,有2个方法
第一个是:
<iframeid="iFramebox" name="iFramebox" width="100%"onload="this.height=iFramebox.document.body.scrollHeight" frameborder="0"scrolling="no" src='/templates/106/ + url + '?id=' +taskid + '></iframe>
这里需要加载的页面的url地址是url + '?id=' + tasked
第二个方法 :
/* 设置iframe高度自适应 */
var _iframe = $("#contentContainer> iframe");
if (_iframe[0].attachEvent) { //attachEvent是IE的监听器
_iframe[0].attachEvent("onload", function () {
//iframe页面加载完成后,你需要写的code
SetIframeHeight(_iframe);
});
} else {
_iframe[0].onload = function () {
//iframe页面加载完成后,你需要写的code
SetIframeHeight(_iframe);
};
}
function SetIframeHeight(iframe) {
_iframe.height(document.frames ?_iframe[0].document.body.scrollHeight :_iframe[0].contentDocument.body.scrollHeight);
}
获取iframe 的高度仅作参考:
function reinitIframe(){var iframe = document.getElementById("frame_content");
try{
var bHeight = iframe.contentWindow.document.body.scrollHeight;
var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
var height = Math.max(bHeight, dHeight);
iframe.height = height;
}catch (ex){}
}
window.setInterval("reinitIframe()", 200);
问题二:
如果iframe加载了某一个页面 a , 但是a 页面又重新指向到了b页面,那iframe如何自动跳转到新页面b呢 ?
这种情况需要用到异步加载获取新地址,也介绍2种方法:
方法一:
$.get(url +'?id=' + taskid, function (data) {
$iframeBox.attr("src", data);
});
说明: url为取得的a页面的地址,data为新指向的b页面的地址,然后把之前页面中的iframe的src地址进行修改,$iframeBox.attr("src",data)
方法二:也是用异步的方式,传递A 页面的url,type设置为”GET”,
$.ajax({
url: url + '?id=' + taskid,
async: false,
type: "GET",
data: "",
success: function (data) {
$iframeBox.attr("src",data);
}
});
问题三:当iframe页面加载完成后,如果我需要对 iframe进来的页面里的标签引用并做一些必要的事情的时候,该如何处理呢?(如何实现在iFrame加载相应的aspx 完成后再操作contentDocument中的元素)
因为通过iframe引进来的页面是个独立的页面,在我们的页面中我们只能引用iframe标签,不能引用到iframe标签里面的任何标签,假如被iframe引入进来的页面里有个id为divHidden的标签,只能通过
$("#divHidden", $("iframe")[0].contentDocument);来获取,contentDocument属性以HTML对象返回框架容纳的文档,可以通过所有标准的DOM方法来处理被返回的对象。
这一部分的完成代码为:
/* load taskinformation {加¨?载?task的ì?详¨o细?信?息?é} */
functionloadInformation(url, taskid) {
$("#loadingInfo").show();
var $iframeBox = $('<iframeid="iFramebox" name="iFramebox" width="100%"onload="this.height=iFramebox.document.body.scrollHeight" frameborder="0"scrolling="no" src='/templates/106/ + url + '?id=' + taskid +'></iframe>');
$iframeBox.appendTo($("#serviceTogerther"));
$.ajax({
url: url + '?id=' + taskid,
async: false,
type: "GET",
data: "",
success: function (data) {
$iframeBox.attr("src",data);
}
});
var _iframe = $iframeBox;
if (_iframe[0].attachEvent) {
_iframe[0].attachEvent("onload", function () {
getHiddenField();
SetIframeHeight(_iframe);
});
} else {
_iframe[0].onload = function () {
getHiddenField();
SetIframeHeight(_iframe);
};
}
function SetIframeHeight(iframe) {
_iframe.height(document.frames ?_iframe[0].document.body.scrollHeight :_iframe[0].contentDocument.body.scrollHeight);
}
function getHiddenField() {
$("#loadingInfo").hide();
var $hiddenInput = $("#divHiddeninput", $("iframe")[0].contentDocument);
var $StatusInput =$("#StatusButton").find("input");
var $hotlinks =$("#TaskDetailQuickLink .serviceHotLink .Links");
var sb = $hiddenInput.eq(0).val();
var fb = $hiddenInput.eq(1).val();
var cb = $hiddenInput.eq(2).val();
if (sb == 0) {$StatusInput.first().attr("disabled", "disabled"); } else {$StatusInput.first().removeAttr("disabled"); }
if (fb == 0) {$StatusInput.eq(2).attr("disabled", "disabled"); } else {$StatusInput.eq(2).removeAttr("disabled"); }
if (cb == 0) {$StatusInput.last().attr("disabled", "disabled"); } else {$StatusInput.last().removeAttr("disabled"); }
$StatusInput.eq(1).removeAttr("disabled");
/* Get the hot link number */
$hotlinks.html("");
$(".branding-tagline-normal,.branding-tagline-special",$("iframe")[0].contentDocument).each(function () {
var title = $(this).text();
$hotlinks.append('<ahref="javascript:void(0);">' + title + '</a>');
});
if($.trim($hotlinks.find("a").last().text()) != "Comment") {
$hotlinks.append('<ahref="javascript:void(0);"> Comment </a>');
}
}
/*
$.get(url + '?id=' + taskid, function(data) {
$iframeBox.attr("src", data);
});
*/
$(".serviceHotLink").show();
}
Iframe 在项目中的使用总结的更多相关文章
- 项目中踩过的坑之-sessionStorage
总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助. 项目情景: 有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面 ...
- Jquery和Javascript 实际项目中写法基础-弹出窗和弹出层 (4)
一.实际项目中有很多如下界面效果. 二.该效果可以归结为弹出窗或者弹出层来实现的,为什么这么说?看如下代码: <!DOCTYPE html> <html> & ...
- 教你利用iframe在网页中显示天气
来源:http://www.ido321.com/921.html css: 1: *{margin:0;padding:0;list-style-type:none;} 2: a,img{borde ...
- ckeditor编辑器在java项目中配置
一.基本使用: 1.所需文件架包 A. Ckeditor基本文件包,比如:ckeditor_3.6.2.zip 下载地址:http://ckeditor.com/download 2.配置使用 A.将 ...
- RN 导入原有Xcode项目中,引入Pod依赖出现的问题与解决
RN 导入原有Xcode项目中,引入Pod依赖出现的问题与解决 前言 最近学习React Native技术.将RN引入到原来Xcode项目中有一步:给原来Xcode项目添加所需要的Pod依赖 写好Po ...
- iOS项目中常见的文件
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- 关于父窗口获取跨域iframe子窗口中的元素
这几天在项目中遇到,一个难点, 就是需要异步加载一个pdf插件, 同时又需要获取这个插件中的点击事件来生成用户的下载记录. 刚开始也是想了很多方法,网上搜的 格式1:$("#iframe的I ...
- js 自己项目中几种打开或弹出页面的方法
自己项目中,几种打开或弹出页面的方法(部分需要特定环境下) var blnTop = false;//是否在顶层显示 ///动态生成模态窗体(通过字符串生成) ///strModalId:模态窗体ID ...
- 项目中使用http referer,为了盗取图片资源
项目背景:因为图片的数据是爬取的别人的图片,而且保存的数据仅仅是图片地址链接,为了减少数据存储和服务器压力,但是这就引发一个问题,有的图片地址没有做防盗处理,可以随意的下载使用:但有些图片的服务器做了 ...
随机推荐
- 【POJ 2406】Power Strings 连续重复子串
看的<后缀数组——处理字符串的有力工具>这篇论文,在那里这道题是用后缀数组实现的,复杂度为$O(nlogn)$,很明显长度为$2×10^6$的数据会TLE,所以必需得用复杂度为$O(n)$ ...
- bootstrap的基本模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- watch监听 chechbox 全选
// 监控全选checkbox的状态 $scope.$watch('AllCheck', function (newValue, oldValue) { // 第一次不执行 if (newValue ...
- OPENGL若干重要基础概念
投影:3D数据“压平”到2D的计算机屏幕上,即将真正的三维物体显示到二维屏幕上,这种3D压平到2D的过程称为投影. 投影类型:正投影,透视投影 正投影:垂直于投影平面的平行投影(不垂直的投影平面的平行 ...
- 【BZOJ-2721】樱花 线性筛 + 数学
2721: [Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 499 Solved: 293[Submit][Status][D ...
- 【bzoj1086】 scoi2005—王室联邦
http://www.lydsy.com/JudgeOnline/problem.php?id=1086 (题目链接) 题意 求将树分为几个联通块,每个联通块大小大于B小于3B,是否可行. Solut ...
- restore和recover的区别(转)
recover和restore的区别: restore just copy the physical file, recover will consistent the database. resto ...
- Android——旋转屏幕导致Activity重建解决方法
Android开发文档上专门有一小节解释这个问题.简单来说,Activity是负责与用户交互的最主要机制,任何“设置”(Configuration)的改变都可能对Activity的界面造成影响,这时系 ...
- dbm速算
经常用到,但是经常搞忘记.在这里记录一下换算的一些技巧. 为什么要用dB 在最前面,需要解释一下dB的由来,这样会让理解变得简单一点.事实上,dB(分贝)是一个纯计数单位.使用dB的目的呢,其实就是用 ...
- 数据结构算法C语言实现(十四)--- 4.1&4.2串的类型定义、表示及实现
一.简述 [暂无] 二.头文件 //4_2_part1.h /** author:zhaoyu */ //2016-6-10 //----串的定长顺序存储表示---- #include "h ...