【发布时间】:2011-10-02 01:47:27
【问题描述】:
我有一个用 node 构建的聊天。此聊天在 example.com 的端口 3000 上运行。我通过 jQuery 的 ajax 调用在同一域的页面中使用此聊天。因此,我在 example.com:3000 上运行了聊天,并且在 example.com:80 上运行了包含此聊天的网站。因为不同的端口(即使在同一个域上)已经违反了同源策略,所以我在我的节点服务器标题中包含了 "Access-Control-Allow-Origin" : "*" 以允许对我的聊天进行交叉调用。
因为 ajax 加载的聊天在 example.com:80 上寻找它的 js/css 文件,所以我不得不将 example.com:3000 上的 js/css 文件的路径设置为绝对路径。所以聊天正在寻找带有“http://example.com:3000/css/style.css”和“http://example.com:3000/js/client.js”的js/css文件。这在使用常规浏览器(Safari、Firefox、Chrome 等)时运行良好,在它自己的 example.com:3000 上聊天并包含在 example.com:80 中。
但是,这就是问题所在,它不适用于任何移动 Safari(iPhone、iPod、Ipad)。使用 ajax 调用可以正常加载聊天主页,但不会加载后续的 js/css 文件。我不能使用相对路径,因为 client.js 和 style.css 文件位于跨域的 example.com:3000 上。
还有其他地方我需要放置“Access-Control-Allow-Origin”设置吗?或者我需要对路径做些什么?或者我需要在 jQuery 中进行一些设置才能完成这项工作?我没有想法,因为除了报告错误之外,移动 Safari 上没有调试工具。我没有得到。
【问题讨论】:
-
移动版 Safari 是否向服务器发出了实际请求,如果有,返回码是什么?
-
当嵌入父页面时,发出请求并且节点服务器返回索引页面,它加载得很好,但是没有来自移动 safari 对 style.css 或 client.js 的后续调用。当我在加载嵌入式聊天时查看节点的控制台时,只请求索引。当我在移动 safari 中直接打开 example.com:3000 时查看节点的控制台时,会请求索引页面、client.js 和 style.css。因此,当我尝试将 example.com:3000 嵌入父页面时,移动 safari 不会发送对 example.com:3000 需要运行的任何文件的请求。
标签: jquery ajax node.js cross-domain mobile-safari