相关疑难解决方法(0)

在跨域子帧中阻止对 <input> 元素的自动对焦

在我们的 Web 应用程序/站点中,我需要使用 iframe 或弹出窗口来验证当前令牌是否有效,如果无效则刷新它。

因此,我创建了一个 iframe,并将属性“src”设置为验证链接,例如“https://<domain_name>/auth?client_id=xxx”,这与我们的应用程序域 https://<app_domain> 不同。并且返回值将类似于“https://<domain_name>/code=yyyy”

document.createElement('iframe');
Run Code Online (Sandbox Code Playgroud)

我为网络应用程序/站点添加了消息句柄,例如

window.addEventListener("message", this.messageHandler);
Run Code Online (Sandbox Code Playgroud)

在 messageHandler 中,我将检查消息是否来自指定的网站,然后验证“代码”值、blabla 等。

但是在 Chrome 中运行时,我总是收到错误“阻止自动聚焦跨域子帧中的元素”。

让我困惑的是:

  1. 在 Chrome 浏览器中运行时总是失败,但在 Firefox 和 Edge 铬中可以正常运行。
  2. 我尝试设置 iframe.sandbox = "allow-forms allow-scripts allow-same-origin",问题依然存在。
  3. 如果验证令牌在 iframe 中失败或超时,我将创建一个弹出窗口以继续验证和刷新令牌。但是每次,使用弹出窗口总是可以成功的。如果真的是跨域问题,为什么使用iframe失败,使用弹出窗口成功。
  4. 我没有使用window.postmessage。因为我不知道如何将 iframe/popup-window 的返回值传递给主页。
  5. 我在启动 Chrome 时使用了 Chrome 的 CORS 扩展或使用参数 --disable-web-security。问题仍然存在。
  6. when I created the iframe or popup window. it is very simple, I just set the iframe.src property, there is no element being created.

any help will be much appreciated.

p.s. I …

javascript iframe cross-domain

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

cross-domain ×1

iframe ×1

javascript ×1