`

document.domain 跨域问题

    博客分类:
  • js
 
阅读更多

document.domain

用来得到当前网页的域名。
比如在地址栏里输入:

javascript:alert(document.domain); //www.315ta.com

我们也可以给document.domain属性赋值,不过是有限制的,你只能赋成当前的域名或者基础域名。
比如:
javascript:alert(document.domain = "315ta.com"); //315ta.com
javascript:alert(document.domain = "www.315ta.com");//www.315ta.com

上面的赋值都是成功的,因为www.315ta.com是当前的域名,而315ta.com是基础域名。

但是下面的赋值就会出来"参数无效"的错误:
javascript:alert(document.domain = "cctv.net"); //参数无效
javascript:alert(document.domain = "ttt.315ta.com"); //参数无效

因为cctv.net与ttt.315tas.com不是当前的域名也不是当前域名的基础域名,所以会有错误出现。
这是为了防止有人恶意修改document.domain来实现跨域偷取数据。


利用document.domain实现跨域:
前提条件:这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域

Javascript出于对安全性的考虑,而禁止两个或者多个不同域的页面进行互相操作。
相同域的页面在相互操作的时候不会有任何问题。

比如在:aaa.com的一个网页(a.html)里面利用iframe引入了一个bbb.com里的一个网页(b.html)。
这时在a.html里面可以看到b.html里的内容,但是却不能利用javascript来操作它。因为这两个页面属于不同的域,在操作之前,js会检测两个页面的域是否相等,如果相等,就允许其操作,如果不相等,就会拒绝操作。
这里不可能把a.html与b.html利用JS改成同一个域的。因为它们的基础域名不相等。(强制用JS将它们改成相等的域的话会报跟上面一样的"参数无效错误。")

所以如果在a.html里引入aaa.com里的另一个网页,是不会有这个问题的,因为域相等。

有另一种情况,两个子域名:
aaa.xxx.com
bbb.xxx.com

aaa里的一个网页(a.html)引入了bbb 里的一个网页(b.html),
这时a.html里同样是不能操作b.html里面的内容的。
因为document.domain不一样,一个是aaa.xxx.com,另一个是bbb.xxx.com。

这时我们就可以通过Javascript,将两个页面的domain改成一样的,
需要在a.html里与b.html里都加入:

document.domain = "xxx.com";

这样这两个页面就可以互相操作了。也就是实现了同一基础域名之间的"跨域"。

分享到:
评论

相关推荐

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

    本文实例分析了js设置document.domain实现跨域的注意点。分享给大家供大家参考。具体分析如下: document.domain 用来得到当前网页的域名。 比如在地址栏里输入: 代码如下:[removed]alert(document.domain&#41...

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

    因此,正确使用`document.domain`是非常关键的,应谨慎设置,避免不必要的跨域暴露。 在实际应用中,应该遵循最小权限原则,只在确实需要的时候设置`document.domain`,并且确保这样做不会带来安全漏洞。同时,定期...

    showModalDialog open弹出子窗口操作parent、opener父窗口及跨域处理

    3> IE与FireFox对两个弹出窗口在跨域时的解析也有不同:通过window.dialogArguments操作父窗口时,在IE下不需要指定document.domain而在FireFox下则正好相反需要指定才能生效;采用opener方式操作父窗口时都不需要...

    js跨域问题解决方案.

    如果子域和父域是相同的顶级域名,可以通过设置`document.domain`为相同的值,实现子域和父域之间的跨域通信。 #### 3.5 postMessage API `postMessage`允许不同源的窗口之间进行通信,通过`window.postMessage()`...

    跨域解决方案

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

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

    总的来说,`document.domain`配合`iframe`提供了一种解决PHP AJAX跨子域问题的有效途径,使得同一主域下的不同子域能够相互通信。然而,这种方法也存在局限性,比如不支持所有浏览器,以及无法跨完全不同的域。因此...

    前端解决跨域问题的8种方案.docx

    当两个页面的主域相同但子域不同时,可以通过设置`document.domain`来实现跨域访问。例如,在`www.a.com/a.html`页面中,可以通过以下方式设置`document.domain`并与`www.script.a.com/b.html`进行通信: ```...

    ajax跨域问题的解决办法.rar

    然而,由于浏览器的同源策略限制,Ajax请求通常只能在同一个协议、域名和端口下进行,这被称为“跨域”问题。本教程将详细探讨如何解决Ajax跨域问题。 一、同源策略 同源策略是浏览器为了保障用户安全而实施的一种...

    完美解决iframe跨域问题

    3. **修改`document.domain`**:如果父页面和子页面的顶级域名相同,但子域名不同,可以尝试设置`document.domain`为相同的顶级域名,从而解除跨域限制。但这种方法只适用于部分情况,且有安全隐患。 4. **JSONP...

    js -- 跨域问题.doc

    可以设置相同的document.domain属性值来解决跨域。缺点是该方法只限于主域相同,子域不同的跨域场景。 (3)postMessage API解决跨域 postMessage API通常用于获取嵌入页面中的第三方数据。一个页面发送消息,另一...

    润乾报表跨域问题解决方案

    总的来说,润乾报表的跨域问题解决方案依赖于JavaScript的`document.domain`属性和正确的服务器配置。遵循上述步骤,可以有效地解决报表在跨域环境下的下拉控件不可用问题,实现报表的正常显示和交互。这种方法虽然...

    javascript跨域访问的方法.docx

    修改`document.domain`来跨子域 **1. 基于iframe实现跨域** 这种方法适用于两个页面的域具有共同的基础域,例如aa.xx.com和bb.xx.com。它们必须使用相同的协议(如http或https)和端口(如80或443)。在两个页面...

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

    3. document.domain + iframe 跨域 4. location.hash + iframe 5. window.name + iframe 跨域 6. postMessage 跨域 7. nginx 代理跨域 8. nodejs 中间件代理跨域 9. WebSocket 协议跨域 一、 通过 jsonp 跨域 通常...

    解决ajax跨域问题

    对于同一顶级域名下的子域名间跨域,可以设置`document.domain`属性为相同的值。比如,`example.com`和`sub.example.com`可以通过设置`document.domain = "example.com"`来实现跨域。 5. postMessage API `post...

    JS跨域请求解决方案.docx

    当主域名相同但子域名不同的情况下,可以使用`document.domain`加上`iframe`的方式解决跨域问题。 - **实现原理**:两个页面都需要通过JavaScript设置`document.domain`为基础主域,从而实现同源。 - **示例...

    详解js跨域请求的两种方式,支持post请求

    context: document.body, success: function(data) { console.log(data); } }); 这个调用实际上的实现原理是 在网页中构造一个script标签,将src设置为对应的url,并增加上相应的callback参数,形如

    js中几种实用的跨域方法原理详解

    当两个页面处于同一主域但不同子域时,可以通过设置`document.domain`来实现跨域通信。例如,`http://www.example.com/a.html`和`http://example.com/b.html`可以通过将`document.domain`都设置为`example.com`来...

    javascript使用window.name解决跨域问题第1/2页

    传统的解决方案包括使用`document.domain`(同一二级域名下)、`JSONP`、`CORS`等,而`window.name`提供了一种替代方案。Thomas Frank最初利用`window.name`来克服cookie的一些局限性,如每个域名的大小限制、只能...

    Ajax跨域传输参数

    可以将book.aa.com用iframe添加到 www.aa.com的某个页面下,在www.aa.com和iframe里面都加上document.domain = "aa.com",这样就可以统一域了,可以实现跨域访问。就和平时同一个域中镶嵌iframe一样,直接调用里面的...

Global site tag (gtag.js) - Google Analytics