我有一個本地文件a.html
,如下所示,它可以通過https://localhost/a.html
啓動。通過點擊Open b
,它可以打開另一個文件b.html
,然後通過Send
按鈕,它可以通過postMessage
發送數據:Make localhost/... popup localhost:3000/
<html>
<body>
<p onclick="openWindow()">Open b</p>
<form>
<input type="button" value="Send">
</form>
<script>
function openWindow() {
var popup = window.open("https://localhost/b.html", "popup", "width=200, height=200");
// var popup = window.open("https://localhost:3000/#/new", "popup", "width=1000, height=1000");
var button = document.querySelector("form input[type=button]");
button.onclick = function(e) {
e.preventDefault();
e.stopPropagation();
popup.postMessage("hi, how are you?", popup.location.href);
}
}
</script>
</body>
</html>
現在,而不是打開https://localhost/b.html
,我想開一個頁面https://localhost:3000/#/new
本地應用服務。所以我取消註釋var popup = window.open("https://localhost:3000/#/new", "popup", "width=1000, height=1000");
。然後在打開它會引發錯誤:
Uncaught DOMException: Blocked a frame with origin "https://localhost" from accessing a cross-origin frame.
at HTMLInputElement.button.onclick (https://localhost/a.html:20:49)
如此看來,https://localhost/
和https://localhost:3000/
被視爲跨域。
有沒有人有任何解決方法或解決方法,使https://localhost/a.html
打開https://localhost:3000/#/new
?
編輯1:我使用Mac。實際上,當進行製作時,所有內容都將放在同一個域www.myexample.com
之下,其中包含像a.html
這樣的靜態文件並運行服務器。我只想在Mac中爲localhost
開發一個簡單的解決方案。
編輯2:一個限制是,我必須打開a.html
https://localhost/a.html
;我不允許使用http
或將其作爲靜態文件(即https://localhost:3000/a.html
)。
他們只是交叉原點,你需要像nginx的反向代理使他們成爲同一臺服務器。 –
我使用mac,我只想在'localhost'中開發一個簡單的解決方案,請參閱我的PS ... – SoftTimur
你用什麼來提供文件?本地主機上的https只不過是愚蠢的,因爲大多數瀏覽器專門處理本地主機並添加一個自簽名證書是沒有意義的。 –