gpt4 book ai didi

javascript - 来自 iframe 的 AJAX 请求,为什么来源是父级的 URL?

转载 作者:行者123 更新时间:2023-12-03 07:37:28 25 4
gpt4 key购买 nike

我有一个正在加载 iframe 的网站。iframe 与网站本身位于不同的子域中。假设网站位于 portal.domain.com 上,iframe 位于 iframe.domain.com 上。我需要从 portal.domain.comiframe.domain.com 发出请求,并且我希望使用此 iframe 来发出这些请求。

我像这样创建了 iframe:

// On portal.domain.com
document.domain = "domain.com";
var iframe = document.body.appendChild(document.createElement('iframe'));
iframe.contentWindow.onIframeLoad = function() {
iframe.contentWindow.makeRequest();
}

var doc = iframe.contentWindow.document;
doc.open().write('<body onload="' +
'var s = document.createElement(\'script\');' +
's.onload = onIframeLoad;' +
'document.getElementsByTagName(\'head\')[0].appendChild(s).src=\'' + "iframe.domain.com/content.js" + '\'">');
doc.close();

iframe 中加载的脚本如下所示:

// iframe.domain.com/content.js
document.domain = "domain.com"

function makeRequest() {
// AJAX call here
}

已进行 AJAX 调用,但源设置为 portal.domain.com。这会导致 cookie 无法发送,并且浏览器会由于其 CORS 策略而阻止响应。为什么会发生这种情况?

最佳答案

嗯,

你不能。这样做实际上是跨域执行,这是一个巨大的安全风险。因此,大多数现代浏览器都会跟踪您脚本的原始入口点,并查看它是从不同的域加载的。

如果你想这样做:

  1. 从 iFrame 域加载 JavaScript

  2. 定义一个对象(比如说 window.iframeparams)

  3. 填充它

  4. 在从 iframe 域加载的 JavaScript 代码上调用“发送”

这实际上与谷歌分析或任何其他跟踪软件的过程相同

编辑:

同样,浏览器将跟踪调用来源。因此,您通过创建动态 iFrame 的方法将不起作用(或者可能在 ie6 上)

关于javascript - 来自 iframe 的 AJAX 请求,为什么来源是父级的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35548482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com