none
新Edge/Chromeで子ウィンドウから親ウィンドウの要素取得window.opener.document.getElementById時にエラー RRS feed

  • 質問

  • 先日Windows Updateの自動更新(KB4559309)で強制的に新Edgeに切り替えが行われました。
    その新Edge及びChromeで、今まで動いていたHTMLのJavaScriptの処理がエラーとなってます。

    別サイトで確認したところ、自動更新で強制的にアップデートが行われた場合、アンインストール等で元に戻す事ができないとなってます。
    そのため、新EdgeやChromeが全く使えず困っている為、原因と対応方法を教えて頂けませんでしょうか。
    ※別環境のPCではInternet Explorerでは正常に稼働に稼働することを確認していますが、
     私のPCでは再インストールしても動かない為、Internet Explorerを使用する以外の対応方法を教えてください。

    <エラー発生環境>
    Microsoft Edge
     バージョン 83.0.478.45 (公式ビルド) (64 ビット)
    Google Chrome
     バージョン 83.0.4103.97 (Official Build) (64ビット)

    ※正常に動くInternetExplorerのバージョンは
     バージョン 11.900.18362.0

    <エラー概要>
    新Edge/Chromeで子ウィンドウから親ウィンドウの要素取得window.opener.document.getElementById時にエラーが発生する。
    JavaScriptで[window.opener.document]の段階でエラーが発生している模様。

    <エラーの再現方法>
    1.[parent.html]と[child.html]の2ファイルを同一フォルダ内で作成
      ファイルの中身のソースは下部に記載してます。
    2.[parent.html]を開く(JavaScriptを有効にし、ポップアップのブロックは解除してください。)
    3.[child.html]のボタンを押下する。
       Internet Explorerの場合:
         [parent.html]のテキストボックスの内容が正常に出力される。
       Microsoft Edge、Google Chromeの場合:
         エラーが発生し、catch{}内の処理に移ってしまう。
         なお、6/10頃は同様のHTMLは正常に稼働していました。
         そのため、KB4559309による新Edgeへの切替が原因ではないかと推測していますが
         バージョンを戻す事が不可能な為、どうにもならない状況になってます。

    <ソースコード>
    ・[parent.html]の内容
    ---ここから---
    <!DOCTYPE HTML>
    <html>
    <head>
    <title>Parent</title>
    <script type='text/javascript'>
    function openChild(){
      window.open('./child.html');
    }
    </script>
    <body onLoad='openChild();'>
    parentValue:<input id='parentValue' type='input' value='hogehoge'>
    </body>
    </html>
    ---ここまで---

    ・[child.html]の内容
    ---ここから---
    <!DOCTYPE HTML>
    <html>
    <head>
    <title>Child</title>
    <script type='text/javascript'>
    function getParentValue(){
      var val;
      try {
        val = window.opener.document.getElementById('parentValue').value
        alert(val);
      } catch(e) {
        alert('Faild:getParentValue()');
      }
    }
    </script>
    <body>
    <input id='childButton' type='button' value='getParentValue' onclick='getParentValue();'>
    </body>
    </html>
    ---ここまで---

    なお、別PCで再現確認を追加で行いましたが、KB4559309を含むWindows Update前後で上記を稼働確認したところ
    Update前はエラーが発生せず、Update後にエラーが発生している事を確認しています。

    よろしくお願いいたします。

    2020年6月17日 8:37

回答

  • TAKUMA_128さん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    私の側で問題を確認したところ、新しいEdgeとChromeでも同様のエラーが発生します。 IEは正常に動作します。
    コードをデバッグしようとしたところ、問題がクロスサイトスクリプティングに関連している場合、Chromeブラウザがこのエラーを表示することがわかりました。

    両方のファイルをローカルマシンに配置したようです。
    任意のWebサーバーでファイルをホストしてみてください。例:IIS。
    その後、ファイルにアクセスしてみてください。正しい出力が表示されます。
    新しいEdgeとGoogle Chromeでテストしました。どちらも正しい結果を示しています。

    MS Edgeバージョン83.0.478.54(公式ビルド)(64ビット)でテストの結果は下記のリンクをご確認ください。
    https://imgur.com/a/R0W3qjV
    したがって、上記のテストから、問題はWindowsの更新とは関係がないように見えます。

    また、Windowsの更新後、古いEdgeブラウザーを新しいEdgeブラウザーに置き換えたと述べていますが、古いEdgeブラウザーを引き続き使用したい場合は、以下のリンクに記載されている手順を参照できます。
    https://docs.microsoft.com/ja-jp/deployedge/microsoft-edge-sysupdate-access-old-edge
    これは、古いと新しいEdgeブラウザーの両方を並べて使用するのに役立ちます。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク TAKUMA_128 2020年6月24日 13:18
    2020年6月24日 8:14
    モデレータ

すべての返信

  • TAKUMA_128さん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    私の側で問題を確認したところ、新しいEdgeとChromeでも同様のエラーが発生します。 IEは正常に動作します。
    コードをデバッグしようとしたところ、問題がクロスサイトスクリプティングに関連している場合、Chromeブラウザがこのエラーを表示することがわかりました。

    両方のファイルをローカルマシンに配置したようです。
    任意のWebサーバーでファイルをホストしてみてください。例:IIS。
    その後、ファイルにアクセスしてみてください。正しい出力が表示されます。
    新しいEdgeとGoogle Chromeでテストしました。どちらも正しい結果を示しています。

    MS Edgeバージョン83.0.478.54(公式ビルド)(64ビット)でテストの結果は下記のリンクをご確認ください。
    https://imgur.com/a/R0W3qjV
    したがって、上記のテストから、問題はWindowsの更新とは関係がないように見えます。

    また、Windowsの更新後、古いEdgeブラウザーを新しいEdgeブラウザーに置き換えたと述べていますが、古いEdgeブラウザーを引き続き使用したい場合は、以下のリンクに記載されている手順を参照できます。
    https://docs.microsoft.com/ja-jp/deployedge/microsoft-edge-sysupdate-access-old-edge
    これは、古いと新しいEdgeブラウザーの両方を並べて使用するのに役立ちます。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク TAKUMA_128 2020年6月24日 13:18
    2020年6月24日 8:14
    モデレータ
  • Haruka 様

    ご確認頂き、ありがとうございました。
    原因が分かり、とても助かりました。

    Chromeブラウザがバージョンアップされた事で、クロスサイトスクリプティング対策が追加され
    その為、ローカルマシンに配置したhtmlファイルからhtmlファイルへの
    アクセス出来なくなったという理解で合ってますでしょうか。

    既存の仕組みで、ローカルマシンの2つのhtmlで呼び出しを行う仕組みを構築してますので
    Webサーバーを立てる必要があった場合影響が大きくなってしまうので、別のやり方を考えます。

    2020年6月24日 13:18