大家好:
这是我的第一篇博客文章,围观有奖,围观有奖!
好了,废话少说,进入主题,前段时间遇到了一个问题:
我在页面里嵌套了一个iframe,iframe连接的是一个异域的地址,花了不少的时间没有发现是什么原因,原以为是js获取iframe页面的dom元素出的问题,居然忽略了是跨域的问题。
有关iframe获取元素也是很容易出问题,我就借此机会将所有有关父页面获取iframe元素,以及iframe获取父页面的方法详细罗列一下,并介绍一个比较不错的跨域取元素的方法:
1.从父页面取iframe窗口:(存在跨域访问限制)
11.window.frames[0];
22.document.getElementById('ifr').contentWindow;
以上两种方法对所有的浏览器有效。
2.获取iframe的document:(存在跨域访问限制)
21.document.getElementById('ifr').contentDocument;
22.document.getElementById('ifr').contentWindow.document;
33.window.frames[0].document;
网上有些资料写的是contentWindow只对ie有效,contentDocument只对非ie浏览器有效,但是经过我的测试,这两种方法是对当前主流浏览器有效的(ie,firefox,chrome,safari,opera)
3.iframe获取父窗口:(存在跨域访问限制)
31.window.parent;(获取一级父窗口)
32.window.top;(获取顶级窗口)
下面我讲两种跨域访问的例子:
js跨域访问:
js跨域访问dom元素是被禁止的,比如:a.com访问b.com以及a.com访问b.a.com的dom元素都是访问不到的,但是js文件是允许访问的,利用这个特点实现跨域。
下面贴上代码:
a.com域的test.html代码:
<input type="button" value="跨域测试" onclick="loadScript('http://localhost:8080/Aset2/pages/ipad2/cosplay/test2.js')"/>
<input type="button" value="test2" onclick="test2()"/>
<div id="ttt">cosplay</div>
function loadScript(url){
var lastScript;
var script = document.createElement("script");
var id = new Date().getTime();
script.src = url;
script.type = "text/javascript";
script.id = id;
if(!script && g(lastScript))g(lastScript).parentNode.removeChild(g(lastScript));
lastScript = id;
document.head.appendChild(script);
}
function g(x){
return document.getElementById(x);
}
b.com的test2.js代码:
function test2(){
var tt = document.getElementById("ttt").innerHTML;
alert(tt);
}
通过127.0.0.1访问a.com的test.html就与b.com(localhost)不在一个域中了,点击跨域测试获取js代码,点击test2可访问从b.com获取的js,正常情况下应该输出cosplay,这种方法跨域比较简单,在js里准备好数据传递给异域的页面,比较起jsonP和代理跨域更简单
sonP跨域访问数据:
域一:使用127.0.0.1访问test.html的代码:
$.ajax({
url:"http://localhost:8080/*****/MH.action",
type:"post",
dataType:"jsonp",
jsonp:"callback",
cache:"false",
async:"false",
data:{自己传递数据},
success:function(data){
alert(data.name);
}
})
上面的$.ajax访问的url是localhost与127.0.0.1是不同的域
其中MH.action的代码:
public String execute() {
JSONObject res = new JSONObject();
res.put("name", "郭德纲");
PrintWriter pw;
try {
pw = Struts2Utils.getResponse().getWriter();
String callback = Struts2Utils.getRequest().getParameter("callback");
Struts2Utils.getResponse().setContentType("text/html");
Struts2Utils.getResponse().setCharacterEncoding("utf-8");
pw.print(callback + "("+res.toString()+")");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
Struts2Utils是自己的类,request,response自己获取即可
运行test.html会输出“郭德纲”。异域获取数据成功!
分享到:
相关推荐
本文将深入探讨如何“完美解决iframe跨域问题”,并介绍其底层的`window.name`转换代理实现。 **一、iframe跨域的基本概念** 1. **什么是iframe**:iframe是一种HTML元素,允许在单个网页中嵌入另一个网页。它通过...
然而,当涉及到跨域时,`iframe` 遇到的问题之一就是无法正常访问父页面或被嵌入页面的`session`。这是因为浏览器的同源策略(Same-Origin Policy)限制了不同源之间的交互,包括`session`和`cookie`。 同源策略是...
在Web开发中,"iframe跨域访问"是一个重要的概念,涉及到浏览器的安全策略和网页的嵌入技术。本文将深入探讨这个主题,以便更好地理解和应用。 首先,我们需要了解什么是iframe。Iframe,全称Inline Frame,是HTML...
6. **Window.name和IFrame**:在某些场景下,可以利用IFrame和`window.name`属性进行跨域数据传递。因为`window.name`属性在页面重载后仍能保持其值,所以可以在IFrame中加载跨域页面,页面加载完成后,将数据存入`...
而HTML5的新特性如离线存储、Web Storage(localStorage和sessionStorage)、Web Workers等,也有助于优化跨域取JSON的数据处理和用户体验。 对于初学者来说,可以从以下几个步骤入手: 1. 学习HTML5和CSS3的基础...
`iframe`与父页面之间的通信是前端开发中的一个重要知识点,它涉及到跨域安全策略、JavaScript编程以及DOM操作等多个方面。 一、`iframe`的基本使用 在HTML中,`<iframe>`标签用于插入一个内联框架。基本语法如下:...
跨域解决方案有哪些 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。广义的跨域包括资源跳转、资源嵌入、脚本...跨域解决方案有很多,选择合适的解决方案取决于具体的应用场景和需求。
7. **IFrame跨域** 通过在IFrame中加载跨域资源,可以利用`postMessage`和事件监听来实现跨域通信。这种方法常用于第三方登录、跨域资源共享等场景。 8. **WCF跨域** 对于使用微软.NET框架的开发者,Windows ...
跨域隔离是指在理想情况下,所有跨域请求都应由来源服务器进行明确审核,如果来源服务器未对资源提供审查,则数据不允许进入到访问者的浏览上下文(Browsing Context Group),保证他们不会受到Spectre攻击的影响。...
在文件跨域上传场景中,通常由一个源(如用户界面所在的网页)向另一个源(如处理文件上传的服务器API)发送数据。 首先,我们创建一个包含文件上传表单的页面,表单需要设置`target`属性为一个`iframe`的ID,这样...
5. **IFrame嵌套**:虽然`showModalDialog`本身不能跨域,但可以在同源的页面中嵌入一个IFrame,然后在这个IFrame内打开目标跨域页面。这样,虽然页面本身跨域了,但是IFrame和父页面间的通信仍可以使用`window....
- **文档加载跨域**:如iframe加载不同源的页面。 - **Ajax请求跨域**:XMLHttpRequest或Fetch API发送请求到不同源。 - **CSS/图片/字体等资源加载跨域**:样式表、图片、字体等静态资源的跨域问题。 - **Websocket...
在网页开发中,`iframe`(Inline Frame)是一种嵌入式框架...选择哪种方法取决于具体的需求,如是否跨域、数据复杂性、安全性和兼容性等因素。在实际应用中,确保遵循最佳实践,以确保数据的安全传输和良好的用户体验。
总结来说,解决iframe跨域高度自适应问题的关键在于找到一种方式,无论子页面是否在同一域,都能让父页面获取到准确的高度信息。这可能需要结合JavaScript、HTML5特性、CSS布局或者服务器端的配合,具体选择哪种方法...
知识点四:iframe跨域通信 iframe元素可以嵌入另一个域的HTML页面。虽然iframe本身受同源策略限制,但可以通过一些技巧实现跨域通信。本文中提到的隐藏iframe和窗口(window)对象的通信是一种技术手段,通过改变...
本示例涉及到的“iframe-cross-domain.rar”文件,很可能包含了一组用于演示或教学如何处理iframe跨域问题的资源。`iframe`(内联框架)是HTML中一个非常有用的元素,它允许在一个页面中嵌入另一个网页,从而实现...
这种方法可以用于父窗口和iframe之间的跨域通信。 6. CORS微服务 在微服务架构中,每个服务可能有自己的域名,使用CORS微服务作为网关,统一处理跨域请求,确保数据安全且可控地在各个服务之间流动。 每种解决...
5. Iframe:通过嵌入一个可跨域的iframe,可以与iframe内的页面进行通信,例如使用`window.postMessage`方法在父子窗口之间传递消息。在提供的示例文件中,可能就包含了这样的实现。 在压缩包的文件列表中,我们...
此时需要通过其他方式来实现跨域数据传输,比如使用postMessage API或者设置CORS(跨源资源共享)策略。 在使用上述方法之前,开发者应该对所处的环境进行同源检测,确保代码的健壮性和安全性。同时,对于安全性...