javascript iframe标签嵌套的问题

前端 iframe嵌套的页面,可以正常显示,但是页面里面的提交按钮的接口,域名会变成localhost,这种情况应该怎么处理呢?需要将跳接口域名变为嵌套页面的正常的域名

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/1091494
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:js 实现iframe + form异步文件提交方案分析
  • 除此之外, 这篇博客: javascript —— 父页面监听iframe子页面的自定义事件中的 怎么触发自定义事件 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 触发自定义事件可以通过指定对象来触发,这里通过window来触发,代码如下:

    window.dispatchEvent(bEvent);
    
  • 以下回答由chatgpt基于相关博客总结生成:

    根据问题描述,你在前端中使用了嵌套的iframe标签,并且遇到了一个问题:嵌套页面中的提交按钮导致的接口跳转时,域名会变成localhost。你想知道如何处理这种情况,需要将接口跳转的域名修改为嵌套页面正常的域名。

    根据提供的参考资料,我提供以下解决方案:

    首先,从参考资料可以看出,通过改变iframe的src属性来实现不同页面的切换。但是这种方式只能刷新整个页面,而不能实现局部刷新。

    第一种方法可以通过以下代码实现:

    <!DOCTYPE html>
    <html>
    <head>
    <script>
    function changeSrc(src) {
        var iframe = document.getElementById("iframe");
        iframe.src = src;
    }
    </script>
    </head>
    <body>
    <a href="#" onclick="changeSrc('a1.html')">1</a>
    <a href="#" onclick="changeSrc('a2.html')">2</a>
    <iframe id="iframe"></iframe> 
    </body>
    </html>
    

    第二种方法通过修改链接的target属性来实现局部刷新:

    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
    <a href="a1.html" target="iframe">1</a>
    <a href="a2.html" target="iframe">2</a>
    <iframe src="" id="iframe"></iframe> 
    </body>
    </html>
    

    以上两种方法都是可以实现局部刷新的,但是这并不能解决你的问题。

    根据提供的参考资料,第二段代码展示了父页面和iframe页面的完整代码。在父页面中,通过使用contentWindow属性获取到了iframe页面的window对象,然后通过在子页面中触发自定义事件来与父页面进行通信。

    根据这个思路,我们可以在子页面中的接口跳转处,通过触发自定义事件的方式,将跳转的url传递给父页面,让父页面来进行跳转。

    具体的实现步骤如下:

    1. 在子页面中,将接口跳转的url传递给父页面,可以通过以下代码实现:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <span id="bspan" style="color:red;">我是嵌入的b页面</span>
        <button onclick="redirectTo('http://example.com/api')">点击跳转</button>
    </body>
    <script type="text/javascript">
        function redirectTo(url) {
            var event = new CustomEvent("redirectTo", {
                detail: {
                    url: url
                }
            });
            window.parent.postMessage(event, '*');
        }
    </script>
    </html>
    
    1. 在父页面中,监听子页面触发的自定义事件,并根据传递的url进行跳转,可以通过以下代码实现:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <h2>嵌入b页面:</h2>
        <iframe id="b_iframe" src="b.html"></iframe>
    </body>
    <script type="text/javascript">
        var bWin = document.getElementById("b_iframe").contentWindow;
        window.addEventListener('message', function(event) {
            if (event.data.detail && event.data.detail.url) {
                window.location.href = event.data.detail.url;
            }
        }, false);
    </script>
    </html>
    

    通过以上的代码,当子页面中的按钮被点击时,会触发自定义事件,并将跳转的url传递给父页面,然后父页面进行页面跳转。

    请注意,由于涉及到跨域通信,需要确保父页面和子页面的域名是同源的,并在子页面中的跳转按钮上添加onclick事件来触发redirectTo函数。

    希望以上解决方案能够帮助到你,如果有任何疑问,请随时提问。