山河故人163 2023-07-01 10:44 采纳率: 0%
浏览 12

javascript iframe标签嵌套的问题

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

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-01 12:30
    关注
    • 你可以看下这个问题的回答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函数。

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

    评论

报告相同问题?

问题事件

  • 创建了问题 7月1日