質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

3986閲覧

サブウィンドウから親ウィンドウのjsを実行させたい

Program_

総合スコア11

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/02/07 11:10

編集2020/02/12 08:09

前提・実現したいこと

親ウィンドウのFRAME(BTM)にあるボタンをクリックする事で子ウィンドウ(サブウィンドウ)が開きます。
子ウィンドウのFRAME(BTM)にあるボタンをクリックする事で親ウィンドウの別FRAME(TOP)にあるjsを実行したいです。
いろいろと調べてみましたが、全く動かず途方に暮れております。
お力添えをお願い致します。

該当のソースコード

HTML

1<!--親:メインフレーム--> 2<FRAMESET ROWS="120px, *" border="0"> 3 <FRAME SRC="top.asp?input=1&num=1&next=1" NAME="TOP"> 4 <FRAME SRC="btm.asp?num=1&next=1" NAME="BTM"> 5</FLAMESET> 6<!--親:TOPフレーム--> 7 <INPUT TYPE=BUTTON onclick=under(10)> 8 <INPUT TYPE=BUTTON onclick=under(15)> 9 <INPUT TYPE=BUTTON onclick=under(20)> 10<!--親:BTMフレーム--> 11 <INPUT TYPE=BUTTON onclick=SubWin()> 12 13<!--子:メインフレーム--> 14<FRAMESET ROWS="120px, *" border="0"> 15 <FRAME SRC="top.asp?input=1&num=1&next=1" NAME="TOP"> 16 <FRAME SRC="btm.asp?num=1&next=1" NAME="BTM"> 17</FLAMESET> 18<!--子:TOPフレーム--> 19<TABLE>---</TABLE> 20<!--子:BTMフレーム--> 21 <INPUT TYPE=BUTTON onclick=submid()>

JavaScript

1 2<!--親:TOPフレーム--> 3function topalert(num) { 4 alert("サブウィンドウから実行されました\nサブウィンドウを更新します") 5 document.MAIN.action = "----.asp?num="+num; 6 document.MAIN.target = "BTM"; 7 document.MAIN.submit(); 8 9<!--子:BTMフレーム--> 10 11function parentload(num){ 12 window.opener.top.document.getElementsByName('TOP')[0].topalert(num); 13}

試したこと

子ウィンドウのメインフレームjsを実行
メインフレームjsから親を呼び出しなども試しましたが全く動きませんでした。。。

追記(20200212

上記記載のソース以外に試したものを下記へ追記致します。
一つ目:親ウィンドウの別フレーム(TOP)にあるJS(topalert)を実行。

JavaScript

1function parentload(num){ 2 window.opener.parent.frames['TOP'].topalert(num); 3}

二つ目:親ウィンドウの別フレーム(BTM)のURLを書き換え。
※親ウィンドウの別フレーム(TOP)にあるJS(topalert)が実行出来ないのかと思い、
親ウィンドウの呼び出し元フレーム(BTM)を直接動かそうと考えました。(topalert実行時と同じ動き)

JavaScript

1function parentload(num){ 2 parent.opener.location.href = "top.asp?num="+num+"&next=1"; 3}

分かり難いかと思い、現状の動きを下記へイラストにて添付します。
簡単な内容のため、「余計に分からん!」となるようでしたら削除致します。。。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/02/07 11:21

「別ウィンドウの関数を実行」で検索すればそれなりに出てきますが、 探してみましたか?
Program_

2020/02/07 12:23

ご指摘ありがとうございます。 本サイト及び他の掲示板、ブログ等も確認して3通りほど試しましたが出来ませんでした。
m.ts10806

2020/02/07 12:48

それを質問に提示されないと何も調べてないのと同じ印象になります。
Lhankor_Mhy

2020/02/08 00:58

質問から外れますが、もう frame タグは使わない方がいいです。 > 非推奨 この機能はウェブ標準から削除されました。まだ対応しているプラウザーがあるかもしれませんが、ゆくゆくはなくなるものです。使用を避け、できれば既存のコードを更新してください。このページの下部にあるブラウザーの対応を見て判断してください。この機能は突然動作しなくなる可能性があることに注意してください。 https://developer.mozilla.org/ja/docs/Web/HTML/Element/frame
Program_

2020/02/12 06:46

m.ts10806様 申し訳ございません。それら調べた中より最も近しいと感じたソースを文内に記載したのですが、「試したこと」として提示すべきでした。誤解を生むような質問となり申し訳ございません。 Lhankor_Mhy様 ご指摘ありがとうございます。 今後の開発においては避けるよう心掛けていきます。 ただ、今回の質問については既存システムの修正となりますので、一旦はこのまま行こうと考えております。 FRAME部分が他にもあるため、丸々置き換えるのは難しいので後回しに。。。 (二度手間である事には変わりないので、サクッと変えてしまいたい思いもあるのですが・・・)
m.ts10806

2020/02/12 06:57

質問は編集できますので適宜調整してください。
Program_

2020/02/12 07:45

ご指摘ありがとうございます。 実際に試した内容を追記致しました。 その他、不備がございましたら仰って下さい。
guest

回答1

0

ベストアンサー

postMessageを使えば親子関係なしに通信が出来そうです。

【window.postMessage - Web API | MDN】
https://developer.mozilla.org/ja/docs/Web/API/Window/postMessage

【[JavaScript] postMessageでクロスドメインメッセージ通信 - Qiita】
https://qiita.com/yasumodev/items/d339a875b4b9bf65d156

【あーありがち - window.postMessageを使ってiframeの中のリンクを外のwindowで遷移させる】
http://aligach.net/diary/20160111.html

投稿2020/02/12 16:05

kei344

総合スコア69606

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Program_

2020/02/14 01:11

ソースを一から見直した結果、サブウィンドウを呼び出している親元で呼び出し時にfucusを外して当ててを繰り返しており、結果的に質問文本文に記載のコードで実行出来なかったようです。(詳細理由不明) 今回は、親元の無駄な呼び出し方を省くことで問題無く動きました!! なお、回答頂いたpostMessageについては私自身、実装したことが無いため今後の開発機会の参考とさせて頂きます!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問