プロが教えるわが家の防犯対策術!

2つのインラインフレームがあって、片方はidがgform のGoogleフォーム、もう片方はidがhoge のframe.htmlというファイルが埋め込んであります(実際はローカルファイルにはしない予定)。
このとき、Googleフォームを送信したらframe.htmlがスーパーリロードされるよう、gformのonload属性にdocument.getElementById("hoge").contentWindow.location.reload(true);を指定したのですが実行されませんでした(alertなどは実行されました)。
どうやったら上のようにできますか?このでしゃばりな初心者にどうかお教えください。

————-
gformのonload属性
onload="alert('Hello');document.getElementById('hoge').contentWindow.location.reload(true);alert('Aloha');"
このとき、Helloというポップアップは出るが、Alohaというポップアップは出ない。

(知恵袋にも同じ質問をしています。マルチポストですがどうかお許しください)

「ifreamをリロードしたい」の質問画像

質問者からの補足コメント

  • うれしい

    迅速な回答ありがとうございます!
    同一オリジンではないのです…
    スーパーリロードの件、勘違いしてました。
    勉強になります。

    一応、下記にソースを載せときます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/05/03 19:30
  • どう思う?

    <table><tr><td style="width:50%"><iframe width="100%" height="800px" frameborder="0" src="frame.html" id="hoge"></iframe></td> <td style="width:50%"><iframe id="resubmit" width="100%" height="800px" frameborder="0" src="https://docs.google.com /forms/d/e/EXAMPLE/viewform?embedded=true" id="gform" onload="document.getElementById('hoge').contentWindow.location.reload(true);"></iframe></td></table>

      補足日時:2022/05/03 19:32

A 回答 (1件)

こんにちは



同一オリジンと仮定しても良いのでしょうか?
一応、その前提で・・・

ご質問の説明の文章だと、gformの文書の中にid=hogeの文書があるわけではないように読めます。
>document.getElementById('hoge')
は自文書内の要素を取得しようとするので、取得できていないのではないですか?
(文書の関係がはっきりしないので、よくわかりませんけれど・・)

一旦、親文書に戻ってそちらで取得すれば要素の取得は可能です。
 window.parent.document.getElementById('hoge')
のような感じで。
※ ただし、同一オリジンでない場合は拒否されます。


ついでながら・・
>スーパーリロードされるよう~
>location.reload(true);を指定~
勘違いをなさっているようですが、引数を指定してもfx以外では「スーパーリロード」の意味にはなりません。
https://developer.mozilla.org/ja/docs/Web/API/Lo …

代替法としては、タイムスタンプ等を付してsrcを再設定するなどが考えられます。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!