`
lixinlixin2008
  • 浏览: 152412 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设置 iframe document.domain杂谈

阅读更多
两个页面:

a.htm为top页面,b.htm在iframe中.
域都为 api.adomain.com

注:所有文字说明都在注释中,只需看文字即可.

a.htm代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>文件上传</title>
<script>
//页面在 api.adomain下面


/*
 * 首先申明一点,  
 * document.domain = "api.adomain.com";
 * document.domain = "adomain.com";
 * 这样的设置是可以的,反之
 * document.domain = "adomain.com";
 * document.domain = "api.adomain.com";
 *  是不行的.非ie下这样设置会保错,ie下虽然不报错但其实没成功
 * 
 * 
 */

/*
 * iframe的src没有值的情况下,除IE以外,iframe的域与父页面相同, IE父页面不能设置document.domain,只要设置就跨域...(ie真是恶心)
 */
document.domain = "adomain.com";

alert(document.domain);
function init(){
	
	document.domain = "api.adomain.com";
	var i001 = document.getElementById("ifr01");
	var doc = i001.contentWindow.document;
	doc.domain = "api.adomain.com";
	alert(doc.domain);
}
</script>
</head> 
<body onload=init()> 
<iframe id="ifr01" src="b.htm"></iframe>


</body> 
</html>



b.htm代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>�ļ��ϴ�</title>
<script>
//页面在 api.adomain.com下面

/* 如果b.htm设置为document.domain = "adomain.com";  则在IE chrome safari下,父页面可以修改b.htm的域为 api.adomain.com(chrome和safari其实没生效)  ,ff和op无法修改(无法修改貌似是比较合理的做法)

如果b.htm设置为document.domain = "api.adomain.com";  则所有浏览器下父页面都可以将其修改为adomain.com

由此可以看出,域可以由api.adomain.com修改为adomain.com,所有浏览器都支持,而不能从adomain.com修改为api.adomain.com(部分浏览器例外,ie,chrome和safari不报错,但是修改不生效)
*/
document.domain = "api.adomain.com";
alert("iframedomain:"+document.domain);
function bcalla()
{
	alert(document.domain);
}
</script>
</head> 
<body> 
<input type=button value="invoke" onclick="bcalla()" />
</body> 
</html>


by: 天堂左我往右
0
0
分享到:
评论

相关推荐

    js设置document.domain实现跨域的注意点分析

    ### js设置document.domain实现跨域的注意点 跨域资源共享(CORS)是Web开发中常见的问题之一,出于安全考虑,浏览器对不同域名下的页面访问施加了限制。然而,在某些场景下,我们可能需要在不同子域之间进行数据...

    Web前端黑客技术揭秘(Web2Hack.org)_(i)7.6.5 跨子域:document.domain技巧1

    `attack.htm`是攻击页面,其JavaScript代码设置了`document.domain='com'`,并创建了一个iframe指向`user.proxy.com/proxy/proxy.htm`,在iframe加载完成后注入`poc.js`。`proxy.htm`中也设置了`document.domain='...

    PHP ajax跨子域的解决方案之document.domain+iframe实例分析

    然而,对于主域相同但子域不同的情况,可以通过设置`document.domain`属性来实现跨子域通信。本文将深入探讨PHP AJAX跨子域的解决方案,特别是使用`document.domain`配合`iframe`的实例分析。 首先,理解`document....

    通过伪协议解决父页面与iframe页面通信的问题

    为解决这个问题,可以在设置`iframe.src`前临时将`base`标签的`target`属性设置为`_self`,在内容写入完毕后再恢复为`_blank`。 尽管这种方法可以解决特定场景下的通信问题,但它也有潜在的风险。伪协议可以被滥用...

    document.frames在非IE浏览器中的解决办法

    frame.document.body.innerHTML = "This is the new content."; } ``` - **child.html**: ```html &lt;!DOCTYPE html&gt; &lt;title&gt;Child Page Initial Content ``` 在这个例子中,当点击...

    IE中document.createElement的iframe无法设置属性name的解决方法

    iframe.name = 'ifr'; //iframe.setAttribute('name', 'ifr'); //这样也不行 上面两种方式都无法设置。后来找到原来也可以这样创建 JavaScript代码 var iframe = document.createElement(‘&lt;iframe name

    Laya和iframe通信.zip

    例如,可以使用`Laya.Browser.document.getElementById`方法获取iframe的引用,然后调用iframe对象的`contentWindow`属性来访问其内部的window对象,从而执行各种操作。 非`addEventListener`监听通信可能指的是...

    iframe高度自适应,多浏览器兼容

    if (iframe && iframe.contentDocument && iframe.contentDocument.body.offsetHeight) { iframe.style.height = iframe.contentDocument.body.offsetHeight + 'px'; } } ``` 这段代码通过`id`找到`iframe`,然后...

    javascript经典特效---滚动的iframe页面.rar

    例如,可以使用`document.getElementById('iframeId').contentWindow.document.body.scrollTop`来获取或设置iframe内页面的垂直滚动位置。 实现滚动特效通常涉及到定时器(如`setInterval`)和事件监听(如`scroll`...

    iframe读取document出现拒绝访问

    iframe.document出现拒绝访问。 threw an exception of type 'System.UnauthorizedAccessException' dynamic {System.UnauthorizedAccessException}

    js iframe 打印 打印预览 页眉页脚的设置

    var iframeDoc = iframe.contentDocument || iframe.contentWindow.document; iframeDoc.head.innerHTML = '&lt;style&gt;@media print {...}&lt;/style&gt;'; iframeDoc.body.innerHTML = '这是页眉&lt;/header&gt;&lt;main&gt;打印内容...

    jQuery获取iframe的document对象的方法

    这里,`#myframe`是`iframe`的ID,`prop('contentWindow')`返回的是`iframe`的窗口对象,而`window`对象在JavaScript中包含了`document`属性,所以通过`.document`可以获取到`iframe`内部的`document`对象。...

    跨域解决方案

    2. document.domain + iframe 跨域:此方案仅限主域相同,子域不同的跨域请求情况。我们可以通过强制设置 document.domain 为基础主域,从而实现同域。 3. location.hash + iframe 跨域 4. window.name + iframe ...

    ajax iframe上传.

    doc = iframe.contentWindow.document; } return doc ? doc.body.innerHTML : ''; } ``` 通过以上步骤,我们就实现了AJAX与iframe结合的文件上传功能。这种方式可以在不刷新页面的情况下完成文件上传,并且能够...

    iframe根据页面内容自适应高度和宽度

    this.style.height = this.contentWindow.document.body.scrollHeight + 'px'; this.style.width = this.contentWindow.document.body.scrollWidth + 'px'; }); ``` 这里,`myIframe`是`iframe`的ID,`...

    iframe拖动功能..........

    iframe.addEventListener('mousedown', function(event) { initialX = event.clientX - iframe.offsetLeft; initialY = event.clientY - iframe.offsetTop; document.addEventListener('mousemove', drag); });...

    动态创建iframe,并动态添加js执行代码

    iframe.width = '500'; iframe.height = '300'; // 将iframe添加到页面的某个元素后面,例如body document.body.appendChild(iframe); ``` 接下来,我们讨论动态添加JavaScript代码。这通常涉及到`document.write`...

    Javascript中document.referrer隐藏来源的方法

    实际上,还有其他的技巧和方法可以尝试,比如使用JavaScript设置document.domain属性或者服务器端进行HTTP头信息的控制等。这些技术的实现和应用需要结合具体的业务场景和技术需求进行详细的研究。

    javascript跨域访问的方法.docx

    注意,`document.domain`只能设置为当前域或更高一级的父域,且主域必须相同。例如,`a.b.example.com`可以设置为`a.b.example.com`、`b.example.com`或`example.com`,但不能设置为子域`c.a.b.example.com`或不同主...

Global site tag (gtag.js) - Google Analytics