前端 iframe嵌套的页面,可以正常显示,但是页面里面的提交按钮的接口,域名会变成localhost,这种情况应该怎么处理呢?需要将跳接口域名变为嵌套页面的正常的域名
触发自定义事件可以通过指定对象来触发,这里通过window来触发,代码如下:
window.dispatchEvent(bEvent);
根据问题描述,你在前端中使用了嵌套的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传递给父页面,让父页面来进行跳转。
具体的实现步骤如下:
<!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>
<!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
函数。
希望以上解决方案能够帮助到你,如果有任何疑问,请随时提问。