如何捕获 Firefox 中抛出的所有 DOMException?

问题描述 投票:0回答:1

我想创建一个方法,如果允许父页面(因为它位于同一域下),则返回 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,

javascript iframe frames
1个回答
0
投票

只需使用普通的 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);};
© www.soinside.com 2019 - 2024. All rights reserved.