`

修改document.domain的注意事项

 
阅读更多

有时候,需要修改document.domain。

  典型的情形:http://a.xxx.com/A.htm 的主页面有一个<iframe src="http://b.xxx.com/B.htm"></iframe>,两个页面的js如何进行交互?
  实现跨域交互的方式有很多,其中这种跨子域的交互,最简单方式就是通过设置document.domain:只需要在A.htm与B.htm里都加上这一句document.domain = 'xxx.com',两个页面就有了互信的基础,而能无碍的交互。
  示例:http://www.wagang.net/jk/document_domain/A.htm
  这种实现跨域的方式很简单,并且主流浏览器都支持(IE6+、Firefox、Chrome等)不过,更改document.domain,会有一系列的副作用,为后续的工作留下隐患。


  本文收集列举这些注意事项,以供参考。

1. 如果修改了document.domain,则在某些机器上的IE678里,获取location.href有权限异常。
例:

复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>JK</title>
    <script>
        document.domain='wagang.net';
    </script>
</head>
<body >
  IE678下,有时获取location.href时有异常:<input type=button value='alert(location.href);' onclick="alert(window.location.href);"> 参见:http://bugs.jquery.com/ticket/8138 jquery ticket#8138 <hr>
  jQuery中相应的代码:
  <pre>
// #8138, IE may throw an exception when accessing
// a field from window.location if document.domain has been set
try {
    ajaxLocation = location.href;
} catch( e ) {
    // Use the href attribute of an A element
    // since IE will modify it given document.location
    ajaxLocation = document.createElement( "a" );
    ajaxLocation.href = "";
    ajaxLocation = ajaxLocation.href;
}
  </pre><hr>
    也可以用:document.URL来获取:<input type=button value='alert(document.URL);' onclick="alert(document.URL);">

</body>
</html>
复制代码


2. 如果页面修改了document.domain,则它包含的iframe,必须也设domain,才能进行交互。就算是同域的页面也必须要设。
  这个例子里:http://www.wagang.net/jk/document_domain/A2.htm
  由于页面设了document.domain,导致它包含的本域页面不能与它交互,因为iframe里的页面没有设置document.domain
3. 设置document.doamin,也会影响到其它跟iframe有关的功能。
  典型的功能如:富文本编辑器(因为是iframe来做富文本编辑器的)、ajax的前进后退(因为IE67要用到iframe,参见:IE6与location.hash和Ajax历史记录
4. 设置document.doamin,导致ie6下无法向一个iframe提交表单。
  这一篇文章里列了问题象与解决方案:IE6与location.hash和Ajax历史记录

附:跟跨域相关的几个参考:
QW.XPC :利用window.name(IE6、7)和postMessage跨域传输数据
屈屈博客:也谈跨域数据交互解决方案
三水清博客:用document.domain+iframe实现Ajax跨子域

分享到:
评论

相关推荐

    基于js中document.cookie全面解析.docx

    #### 五、注意事项 - **安全性**:由于Cookie可能包含敏感信息,因此需要对其进行适当的加密处理。 - **大小限制**:每个Cookie的大小限制通常是4KB,整个域名下的所有Cookie的总大小也有上限。 - **路径和域限制**...

    js 多种方法

    - 可以用来动态修改标题,例如根据用户操作更改页面标题。 ### 知识点七:获取文档的引用来源 #### 概述 该代码段展示了如何使用JavaScript获取链接到当前文档的源文档的URL。 #### 实现方式 1. **HTML结构**...

    JavaScript跨域总结与解决办法

    - **注意事项**: - 只能在主域相同的情况下使用此方法。 - 设置`document.domain`只能设置为主域名。 - 存在一定的安全隐患,因为一旦一个站点被攻破,其他设置了相同`document.domain`的站点也会受到影响。 2...

    javascript实现动态CSS换肤技术的脚本.docx

    #### 五、注意事项 1. **兼容性问题**:确保所使用的代码能够在主流浏览器上正常运行。 2. **性能优化**:避免频繁地读写Cookie,因为Cookie操作可能会导致一定的性能开销。 3. **安全性考虑**:保护好Cookie数据,...

    js操作cookie(增删改查)

    5. **Cookie的限制与注意事项** - Cookie的大小限制约为4KB,且数量有限制,通常每个域名下不能超过20个Cookie。 - Cookie默认只在设置的路径和域内可用,可以通过`path`和`domain`属性进行调整。 - 如果Cookie...

    iFream自动获取高度

    #### 五、注意事项 - **兼容性**:确保使用的JavaScript语法和DOM操作方法在目标浏览器中可用。 - **性能优化**:频繁地调用此函数可能会导致性能下降,可以考虑使用节流(throttle)或防抖(debounce)技术来优化。 - ...

    完美解决iframe跨域问题

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

    js操作cookie

    **五、注意事项** 1. **大小限制**:每个Cookie的大小限制通常为4KB,包括名称、值和所有属性。 2. **路径与域**:默认情况下,Cookie只对创建它的页面有效。可以设置`path`属性来扩展其作用范围,如`path=/`将使其...

    整理JavaScript对DOM中各种类型的元素的常用操作

    ### 实际应用注意事项 在实际应用中,操作DOM时需要注意以下几点: - 在使用`document.getElementById()`或`document.getElementsByName()`等方法时,确保选择器的准确性和唯一性。特别是当表单字段的`name`属性与...

    JS操作Cookie写入和读取实例代码

    注意事项 - Cookie写入时必须用分号(;)结束,确保不同Cookie之间正确分隔。 - 由于document.cookie操作的限制,一次只应修改一个Cookie。 - Cookie的长度有限制,大多数浏览器限制一个网站的单个Cookie的大小为4...

    js设置cookie过期当前时间减去一秒相当于立即过期

    6. 注意事项 使用JavaScript操作cookie时需要注意以下几点: - cookie的大小限制:通常,每个cookie的大小限制在4KB左右。 - 跨域问题:由于浏览器的同源策略限制,一个域下的JavaScript不能读取或修改另一个域下的...

    Javascript读取cookie函数代码

    7. 注意事项: - 由于cookie有大小限制,通常为4096字节,所以在设置cookie时需要考虑到总大小。 - 设置cookie的域和路径时需要注意安全性问题,尽量限制只有需要访问cookie的页面能访问cookie。 - cookie的值不...

    Course--Cookies

    **注意事项** 1. **大小限制**:每个Cookie的大小不能超过4KB,且浏览器对每个域的Cookie数量有限制。 2. **隐私问题**:因为Cookie存储在客户端,可能引发隐私泄露问题。开发者应确保不存储敏感信息,并正确设置...

    Fedora 15 安装 Nginx (PHP-FPM)+MySQL+PHP Web服务.docx

    8. **安全注意事项**: - 更新系统并安装必要的安全软件包,例如防火墙和入侵检测系统。 - 配置防火墙规则,允许必要的入站流量,如HTTP和HTTPS。 - 定期备份数据库和重要文件,确保数据安全。 通过以上步骤,您...

    onlyOffice的https配置

    #### 注意事项 - 在生产环境中部署HTTPS时,强烈建议使用权威证书颁发机构签发的证书,以避免浏览器的安全警告。 - 确保正确配置了防火墙规则,允许外部流量通过端口443。 - 定期更新证书以保持安全性,一般建议...

    cookie机制

    ### 注意事项 虽然Cookie提供了一种方便的方式来跟踪和识别用户,但过度依赖Cookie可能会带来隐私问题。因此,建议在使用Cookie时,要遵循相关法律法规,例如欧洲的GDPR或中国的网络安全法,并向用户清晰地说明...

    JavaScript cookie 跨域访问之广告推广

    9. **开发实践中的注意事项**:在开发实际的跨域广告推广功能时,开发者需要确保对CORS策略有充分的了解,并在服务端正确配置相应的HTTP头信息。同时,还需要保证在客户端代码中,跨域请求的发起方式符合规范,例如...

    elasticsearch数据库下载、配置、使用案例PPT模板

    - **注意事项:** - 确保网络连接稳定,避免下载中断。 - 检查文件的完整性,确保没有损坏。 - **解压Elasticsearch:** - 使用适当的解压工具打开下载的文件。 - 解压到指定目录,推荐使用默认目录结构。 **...

    jquery.cookie.js 操作cookie实现记住密码功能的实现代码

    ### 注意事项 在使用Cookie时,需要考虑以下几点: - Cookie存储空间有限,通常只有4KB,所以不要存储过大的信息。 - 由于Cookie容易被用户删除或禁用,不应依赖Cookie存储重要信息。 - Cookie可以被用户查看和...

Global site tag (gtag.js) - Google Analytics