`
xwcueh
  • 浏览: 25158 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

iframe跨域取数据

阅读更多
大家好:
    这是我的第一篇博客文章,围观有奖,围观有奖!
    好了,废话少说,进入主题,前段时间遇到了一个问题:
    我在页面里嵌套了一个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跨域问题

    本文将深入探讨如何“完美解决iframe跨域问题”,并介绍其底层的`window.name`转换代理实现。 **一、iframe跨域的基本概念** 1. **什么是iframe**:iframe是一种HTML元素,允许在单个网页中嵌入另一个网页。它通过...

    iframe 跨域访问session

    然而,当涉及到跨域时,`iframe` 遇到的问题之一就是无法正常访问父页面或被嵌入页面的`session`。这是因为浏览器的同源策略(Same-Origin Policy)限制了不同源之间的交互,包括`session`和`cookie`。 同源策略是...

    iframe跨域访问示例

    在Web开发中,"iframe跨域访问"是一个重要的概念,涉及到浏览器的安全策略和网页的嵌入技术。本文将深入探讨这个主题,以便更好地理解和应用。 首先,我们需要了解什么是iframe。Iframe,全称Inline Frame,是HTML...

    跨域访问数据-DEMO

    6. **Window.name和IFrame**:在某些场景下,可以利用IFrame和`window.name`属性进行跨域数据传递。因为`window.name`属性在页面重载后仍能保持其值,所以可以在IFrame中加载跨域页面,页面加载完成后,将数据存入`...

    web前端跨域取JSON

    而HTML5的新特性如离线存储、Web Storage(localStorage和sessionStorage)、Web Workers等,也有助于优化跨域取JSON的数据处理和用户体验。 对于初学者来说,可以从以下几个步骤入手: 1. 学习HTML5和CSS3的基础...

    iframe与父页面传值

    `iframe`与父页面之间的通信是前端开发中的一个重要知识点,它涉及到跨域安全策略、JavaScript编程以及DOM操作等多个方面。 一、`iframe`的基本使用 在HTML中,`&lt;iframe&gt;`标签用于插入一个内联框架。基本语法如下:...

    什么是跨域解决方案有哪些.docx

    跨域解决方案有哪些 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。广义的跨域包括资源跳转、资源嵌入、脚本...跨域解决方案有很多,选择合适的解决方案取决于具体的应用场景和需求。

    海康威视h5player.js 2.0版 跨域隔离

    跨域隔离是指在理想情况下,所有跨域请求都应由来源服务器进行明确审核,如果来源服务器未对资源提供审查,则数据不允许进入到访问者的浏览上下文(Browsing Context Group),保证他们不会受到Spectre攻击的影响。...

    Ajax跨域访问解决方案

    7. **IFrame跨域** 通过在IFrame中加载跨域资源,可以利用`postMessage`和事件监听来实现跨域通信。这种方法常用于第三方登录、跨域资源共享等场景。 8. **WCF跨域** 对于使用微软.NET框架的开发者,Windows ...

    HTML5 postMessage+iframe实现文件跨域异步上传

    在文件跨域上传场景中,通常由一个源(如用户界面所在的网页)向另一个源(如处理文件上传的服务器API)发送数据。 首先,我们创建一个包含文件上传表单的页面,表单需要设置`target`属性为一个`iframe`的ID,这样...

    showModalDialog跨域解决例子

    5. **IFrame嵌套**:虽然`showModalDialog`本身不能跨域,但可以在同源的页面中嵌入一个IFrame,然后在这个IFrame内打开目标跨域页面。这样,虽然页面本身跨域了,但是IFrame和父页面间的通信仍可以使用`window....

    js跨域问题解决方案.

    - **文档加载跨域**:如iframe加载不同源的页面。 - **Ajax请求跨域**:XMLHttpRequest或Fetch API发送请求到不同源。 - **CSS/图片/字体等资源加载跨域**:样式表、图片、字体等静态资源的跨域问题。 - **Websocket...

    js 实现iframe 之间传值

    在网页开发中,`iframe`(Inline Frame)是一种嵌入式框架...选择哪种方法取决于具体的需求,如是否跨域、数据复杂性、安全性和兼容性等因素。在实际应用中,确保遵循最佳实践,以确保数据的安全传输和良好的用户体验。

    如何设置iframe高度自适应在跨域情况下的可用方法

    总结来说,解决iframe跨域高度自适应问题的关键在于找到一种方式,无论子页面是否在同一域,都能让父页面获取到准确的高度信息。这可能需要结合JavaScript、HTML5特性、CSS布局或者服务器端的配合,具体选择哪种方法...

    JS跨域取XML--借助AS的URLLoader

    知识点四:iframe跨域通信 iframe元素可以嵌入另一个域的HTML页面。虽然iframe本身受同源策略限制,但可以通过一些技巧实现跨域通信。本文中提到的隐藏iframe和窗口(window)对象的通信是一种技术手段,通过改变...

    iframe-cross-domain.rar

    本示例涉及到的“iframe-cross-domain.rar”文件,很可能包含了一组用于演示或教学如何处理iframe跨域问题的资源。`iframe`(内联框架)是HTML中一个非常有用的元素,它允许在一个页面中嵌入另一个网页,从而实现...

    JS跨域访问解决方案的总结.doc

    这种方法可以用于父窗口和iframe之间的跨域通信。 6. CORS微服务 在微服务架构中,每个服务可能有自己的域名,使用CORS微服务作为网关,统一处理跨域请求,确保数据安全且可控地在各个服务之间流动。 每种解决...

    javaScript跨域通信

    5. Iframe:通过嵌入一个可跨域的iframe,可以与iframe内的页面进行通信,例如使用`window.postMessage`方法在父子窗口之间传递消息。在提供的示例文件中,可能就包含了这样的实现。 在压缩包的文件列表中,我们...

    js实现ifram取父窗口URL地址的方法

    此时需要通过其他方式来实现跨域数据传输,比如使用postMessage API或者设置CORS(跨源资源共享)策略。 在使用上述方法之前,开发者应该对所处的环境进行同源检测,确保代码的健壮性和安全性。同时,对于安全性...

Global site tag (gtag.js) - Google Analytics