跨域脚本标签适用于 FF 和 Chrome,但不适用于 IE

发布于 2024-09-15 10:38:05 字数 791 浏览 8 评论 0原文

我们提供了一个 HTML 片段,我们的客户可以将其嵌入到他们的网站上以回调我们的 API。此 HTML 是一个简单的表单和托管在我们服务器上的 Javascript 文件。

这是客户端在其网站 (clientsite.com) 上托管的内容:

<script type="text/javascript" src="http://mysite.com/webcallback/callback_script.js"></script> 
<form onsubmit="makeCallback();return false;">
<input id="myInput" type="text" />
<input type="submit" value="Go" />
</form>

调用 makeCallback 时,mysite.com 上托管的脚本执行以下操作:

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://mysite.com/api/callback.php");
xhr.send();

请注意,脚本的域和 XHR 请求的域是相同的,但是托管表单和脚本标记的 HTML 位于 clientsite.com 上。

这在 FF 和 Chrome 中工作正常,但在 IE 中我收到访问被拒绝错误。我想这与同源策略有关,但我试图理解为什么这在 FF 和 Chrome 中有效,但在 IE 中无效。有什么办法让它在 IE 中运行吗?

谢谢

We are providing a snippit of HTML that our client can embed on their website to make a callback to our API. This HTML is a simple form and a Javascript file hosted on our server.

This is what the client hosts on their website (clientsite.com):

<script type="text/javascript" src="http://mysite.com/webcallback/callback_script.js"></script> 
<form onsubmit="makeCallback();return false;">
<input id="myInput" type="text" />
<input type="submit" value="Go" />
</form>

When makeCallback is called, the script hosted on mysite.com does the following:

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://mysite.com/api/callback.php");
xhr.send();

Notice that the domain of the script and the domain of the XHR request are the same, but the HTML which hosts the form and the script tag is on clientsite.com.

This works fine in FF and Chrome, but in IE I am getting an access denied error. I imagine it has something to do with the same-origin-policy but I am trying to understand why this works in FF and Chrome but not IE. Is there any way to get it to work in IE?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

江湖彼岸 2024-09-22 10:38:05

包含的脚本在包含它的页面范围内执行,而不是在它自己的范围内执行。因此,您的代码正在从不同的域请求。

允许此请求的浏览器具有更宽松的跨域限制版本。

The included script is executed in the scope of the page that is including it, not in a scope of it's own. Therefore your code is requesting from a different domain.

The browsers that allow this request have a more relaxed version of the cross-domain restrictions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文