2017-03-08 12 views
0

ローカルファイルa.htmlがあります。これはhttps://localhost/a.htmlで起動できます。 Open bをクリックすることで、それはその後、Sendボタンで、それがpostMessageでデータを送ることができ、別のファイルb.htmlを開くことができます。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.htmlhttps://localhost/a.htmlで開く必要があります。私はhttpを使用したり、静的ファイル(すなわちhttps://localhost:3000/a.html)として提供することはできません。

+0

は、彼らは単にクロス起源であり、あなたはnginxのようなリバースプロキシが必要になります同じサーバーにする –

+0

私はmacを使用しています。私は 'localhost'での開発のための簡単な解決策を持っています。私のPSを参照してください... – SoftTimur

+0

ファイルを提供するために何を使用していますか?ほとんどのブラウザはlocalhostを特別に扱い、自己署名証明書を追加することは意味をなさないため、localhostのhttpsは愚かではありません。 –

答えて

0

一つの解決策は、いくつかの特別な引数を持つ端末で開いクロームです。

端末から毎回Chromeを開くことなく、我々は解決策(例えば、いくつかの設定)を持っている場合、それは素晴らしいだろう...

0

あなたはMEANスタックを使用していると言いましたので、あなたはExpressJSを使用していると仮定します。

それは(開発用)静的なサービスを提供することが可能です:http://expressjs.com/en/starter/static-files.html

はそれが何をより安全になり、ちょうど不要な自己署名証明書を追加...ローカルホスト上でhttpsを使用しないでください参照してください。

より一般的な解決策として、nginxを使用して静的ファイルを処理し、バックエンドに他のパスを渡すことができます。私も私のテストのために動作しませんでしたいくつかのクロームアドインを試してみました

open -a Google\ Chrome --args --disable-web-security --user-data-dir=/Users/SoftTimur/Desktop/user-data-dir 

+0

何らかの理由で、 'https:// localhost/a.html'で' a.html'を開く必要があります。私はそれに 'http'を使うことも、静的ファイルとして扱うこともできません。私の更新を見てください。 – SoftTimur

+0

@SoftTimur精巧な**なぜ**あなたはそれを行うことはできません。あなたはおそらく地元の開発を間違っているでしょう。 –

+0

実際には、 'a.html'は私が開発中のmicrosft office addinのメインページです(javascript apiでオフィス用)。彼らのルールは、メインページを 'http'ではなく 'https'で参照することです。ポート「3000」のメインページは参照できません。 – SoftTimur

関連する問題