后来发现通过设置iframe内部页面的target可以实现将内部请求转发到shouldOverrideUrlLoading。具体如下:
时间: 2024-09-28 09:13:03 浏览: 10
当你在一个网页中嵌套了一个`<iframe>`元素,并且这个`iframe`的内容页试图加载新的URL时,如果不处理可能会导致浏览器默认的行为。`window.location`或`window.parent.location`等直接操作会跳转到新URL,而不是留在当前页面。为了控制这种行为,你可以利用`iframe`的`target`属性。
`target`属性可以设置为一些特殊的值,如`"_self"`(默认,表示在同一窗口打开)、`"_blank"`(新开窗口)、`"_parent"`(在父窗口中打开,如果存在的话)、`"_top"`(在顶级窗口中打开,即关闭所有嵌套的框架,回到最原始的浏览器窗口)。如果你将`target`设为`"_top"`或者其他允许外部跳转的值,然后在JavaScript中监听`window.location`的变化,比如使用`window.shouldOverrideUrlLoading`函数,你可以在这个事件中拦截并决定是否按照`iframe`的请求来处理,或者采取其他自定义策略。
例如:
```javascript
window.addEventListener('beforeunload', function(e) {
if (e.target.tagName === 'IFRAME') {
e.preventDefault();
// 这里可以根据需要判断是否需要转发请求,例如检查目标URL是否允许
const url = e.url;
if (shouldOverrideUrlLoading(url)) {
window.location.href = url; // 转发请求
}
}
});
```