javascript - 重定向返回后如何访问 IFRAME 中的查询字符串参数
问题描述
我有一个Host1Page
带有 IFRAME的 HTML,sandbox
不包括IFRAME 的属性,allow-top-navigation
因此托管页面不受 IFRAME 内可能请求的任何导航的影响。最初 IFRAME 呈现我提供的静态 HTML,但是一旦用户以某种方式与其交互,HTML 的 javascript 会将当前窗口(在我的情况下是 IFRAME 的内容)重定向到另一个主机 - Host2Page
。结果,IFRAME 呈现Host2Page
. 想要强调的是,我没有设置 IFRAME 的src
属性,而是设置了window.location.href
,我无法更改重定向的完成方式,因为我不拥有进行该重定向的代码。一旦用户完成与另一个站点的交互,Host2Page
,用户被重定向回与托管我的 IFRAME - 的页面对应的 Uri Host1Page
,同时重定向Host2Page
是通过查询参数提供一些数据。如何从 IFRAME 中访问该查询参数?
我尝试使用myIFrame.contentWindow.location.search
- 但它始终是空的myIFrame.contentWindow.location.href
,并且在重定向到另一个站点之前和之后总是指向Host1Page
托管 IFRAME 的页面的 Uri。
解决方案
如果您控制在第二次重定向后加载的 IFRAME 的内容,则可以使用postMessage
将参数值发送到父页面。
const querystringParams = new URLSearchParams(window.location.search);
const querystringValue = querystringParams.get('paramINeed');
window.parent.postMessage(querystringValue, targetOrigin);
要在您的父页面上接收消息:
window.addEventListener("message", receiveMessage, false);
withreceiveMessage
是一个将事件对象作为参数的函数。
请参阅:https ://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
推荐阅读
- qt - 如何在不使用 Yocto 构建的情况下启用 etnaviv 驱动程序?
- azure-cosmosdb - azure cosmosDB 有 @Query 吗?(文档数据库)
- vuetify.js - 如何更改 V-Data-Table 页脚的默认样式?
- bash - tmux:在窗格中运行命令并在 bash 脚本中捕获结果
- javafx - JavaFX(场景生成器)箭头键 OnKeyPressed
- node.js - 运行“npm install”后,Docker 构建(Windows)挂起
- yii2 - 如何根据 Yii2 中的 radioList 更改显示/隐藏 div 框?
- loops - 使用ffmpeg批量处理文件夹中的所有文件?
- video-streaming - 媒体基金会:英特尔硬件 MFT 的 SPS/PPS 问题
- flowground - 我需要在 flowground 中使用某种决策模块