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

作者:青柠

时间:2026-10-29

浏览:503

本文详解利用document.domain属性解决同基础域名下跨域访问的方法。需满足协议、端口一致且属于同一基础域名,否则赋值会报错。通过修改子域名的domain值至主域名,可实现iframe内不同子域页面的JS交互,注意此方法不适用于不同基础域名的场景。

文章目录

document.domain属性与赋值限制

本示例探讨了JavaScript中配置document.domain以解决跨域问题的关键注意事项,供读者参考。

document.domain 用于获取当前网页的域名。 例如在地址栏输入:

代码如下:

javascript:alert(document.domain); //www.jb51.net

我们可以为document.domain属性赋值,但存在限制:只能设置为当前域名或基础域名。 例如:

代码如下:

javascript:alert(document.domain = "jb51.net"); //jb51.net
javascript:alert(document.domain = "www.jb51.net"); //www.jb51.net

上述赋值均成功,因为www.jb51.net是当前域名,而jb51.net是其基础域名。

然而,以下赋值将导致“参数无效”错误:

代码如下:

javascript:alert(document.domain = "cctv.net"); //参数无效
javascript:alert(document.domain = "www.jb51.net"); //参数无效

由于cctv.net与www.jb51.net既非当前域名也非其基础域名,因此报错。 此举旨在防止恶意修改document.domain以跨域窃取数据。

利用document.domain实现跨域

利用document.domain实现跨域:

前提条件:两个域名必须属于同一基础域名,且协议和端口必须一致,否则无法通过document.domain进行跨域。

出于安全考虑,JavaScript禁止不同域的页面间相互操作。 同域页面间操作无此限制。

例如:在aaa.com的网页(a.html)中通过iframe引入bbb.com的网页(b.html)。 此时在a.html中可查看b.html内容,但无法通过JavaScript操作,因两页面域不同。JS会检测域是否相等,相等则允许操作,不等则拒绝。 无法通过JS将a.html与b.html改为同一域,因其基础域名不等(强制修改会报“参数无效错误”。)

若在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";

如此,两页面即可互相操作,即实现了同一基础域名间的“跨域”。

希望本文所述对大家的javascript程序设计有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章