我想创建一个方法,如果允许父页面(因为它位于同一域下),则返回 iframe 的 URL,如果父页面不允许这样做,则返回一个假值。
我有以下代码由https://cjshayward.com托管:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<iframe name="test_frame" id="test_frame"
src="https://cjshayward.com"></iframe>
<script>
setTimeout(function()
{
try
{
console.log(window.frames.testframe.location.href);
}
catch(error)
{
console.log('Not able to load.');
});
}, 1000);
</script>
</body>
</html>
使用
setTimeout()
是因为如果我指定一个 iframe,然后立即让 JavaScript 尝试加载页面的 URL,它将加载 about:blank
的 URL。
但是,当我将同一位置的脚本 URL 更改为另一个域(没有限制,例如在框架中加载内容)时,Firefox 会记录 catch 块中指定的字符串,并且仍然记录未捕获的 DOMException:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<iframe name="test_frame" id="test_frame"
src="https://orthodoxchurchfathers.com"></iframe>
<script>
setTimeout(function()
{
try
{
console.log(window.frames.testframe.location.href);
}
catch(error)
{
console.log('Not able to load.');
});
}, 1000);
</script>
</body>
</html>
在第一种情况下,它会记录https://cjshayward.com。在第二种情况下,它会记录“无法加载”,但仍然在日志中显示未捕获的 DOMException。
我怎样才能创建一个函数,如果 iframe 的 location.href 可用,则返回它,如果由于浏览器安全限制而无法使用它,则返回一些虚假的内容,例如空字符串?
或者退一步说,记录的 DOMException 不重要吗?如果我用函数内的返回调用替换 console.log() 调用,我的代码是否能够使用返回值作为 iframe 的 URL(如果可用)和假值(如果不可用)?
TIA,
只需使用普通的 window.onerror 事件来捕获它...
<!DOCTYPE html><html><head></head><body>
<script>
window.onerror=(e)=>{alert(e);};
setTimeout(function(){
console.log(window.frames.testframe.location.href);
},2000);
</script>
<iframe name="test_frame" id="test_frame" src="https://orthodoxchurchfathers.com"></iframe>
</body></html>
如果您想更进一步,您还可以...
window.onunhandledrejection=(e)=>{alert(e.reason);};