~JavaScript~
var sub = window.open(~);
if (sub.document.getElementById("Id") != null) {
// IE
} else {
// ChromeまたはFirefox
sub.onload = function() {
// A処理
}
}
「window.open」で開いた子画面から上記の処理を実行しています。
IE、Chromeでは正常に処理が実行されますがFirefoxだと処理が実行されず「A処理」が実行されません。
分岐の中には入りますが「sub.onload」の中に入りません。
無限ループの中で「readyState=="complete"」の場合にループを抜ける処理も試しましたが
ループから抜けませんでした。
どうすれば処理が実行されるのでしょうか。
No.2ベストアンサー
- 回答日時:
いろいろ試してみましたが、結構めんどうな案件ですね
結論からいえば、ccc.htmlが自らonloadで制御しないと無理そうです。
ただしccc.htmlが自分自身の属性を知るためにはbbb.htmlから
パラメータを渡さなくてはいけないので、hrefのsearchかhashで処理してください
参考までに
//aaa.html
<script src="test.js"></script>
<a href="#" onclick="return bbbOpen();">bbb</a>
//bbb.html
<script src="test.js"></script>
<a href="#" onclick="return cccOpen('a');">ccc-a</a>
<a href="#" onclick="return cccOpen('b');">ccc-b</a>
//ccc.html
<script src="test.js"></script>
<script>
window.onload=function(){cccLoad();}
</script>
<div id="ccc-a">あああ</div>
<div id="ccc-b">いいい</div>
//test.js
function bbbOpen() {
window.open('bbb.htm','bbb','width=300,height=200');
return false;
}
function cccOpen(v) {
window.open('ccc.php?flg='+v,'ccc','width=300,height=200');
return false;
}
function cccLoad() {
var s=location.search;
if(s.indexOf("?")==0){
if(s.match(/a$/)){
document.getElementById("ccc-a").style.display="";
document.getElementById("ccc-b").style.display="none";
}else if(s.match(/b$/)){
document.getElementById("ccc-a").style.display="none";
document.getElementById("ccc-b").style.display="";
}
}
}
※チェックが超てきとーなので、しっかりやるためにはsearchからflagの内容を
抜き出して、整合性のチェックをする必要があります
できました。ありがとうございます。
ただ色々と面倒な感じはします。
サーバーの処理で出来るのならそちらに変えたほうが楽ですかね。
No.3
- 回答日時:
>サーバーの処理で出来るのならそちらに変えたほうが楽ですかね。
私もそう思います
サーバー側の処理ならgetでもセッションでもクッキーでも好きな方法でいけるでしょう
ただbbbからcccを呼び出すとき再読み込みをさせないようにすれば
2回目以降の呼び出し時にはダイレクトに子ウィンドウを操作できるはずです
今回の問題はbbbからcccをwindow.openで開いているため
bbbでcccを操作した後にcccが再読み込みされて打ち消していることだと推測されます。
これはcccの再読み込みのタイミングによって動作が必ずしも一定ではないという
不安定さを含んでいます
No.1
- 回答日時:
前回提示したやつでいけません?
(ちょっと仕様がわからないのでなんといえませんが・・・)
//hoge.htm(仮に自分自身を追加で開いていく)
<script>
function myfunc(){
var sub = window.open("hoge.htm");
var timerId=setInterval(function(){
if(sub.document.getElementById("Id")!=null){
sub.document.getElementById("Id").value = "test";
clearInterval(timerId) ;
}
},100);
}
</script>
<input type="button" value="open" onclick="myfunc()">
<input type="text" value="" id="Id">
先ほど確認したらIE、firefoxが動きました。chromeは動きません。
3つのブラウザで動かしたいのですが上手くいきません。
ソースは以下です。
※古いまま。制限のため一部省略。
~~~~~aaa.html~~~~~
<html>
<script type="text/javascript" src="./test.js"></script>
<body>
<a href="javascript:void(0)" onclick="bbbOpen()">bbb</a>
</body>
</html>
~~~~~bbb.html~~~~~
<html>
<script type="text/javascript" src="./test.js"></script>
<body>
<a href="javascript:void(0)" onclick="cccOpen('a')">ccc-a</a>
<a href="javascript:void(0)" onclick="cccOpen('b')">ccc-b</a>
</body>
</html>
~~~~~ccc.html~~~~~
<html>
<body>
<div id="ccc-a">あああ</div>
<div id="ccc-b">いいい</div>
</body>
</html>
~~~~~test.js~~~~~
// bbb呼ぶ
function bbbOpen() {
window.open('./bbb.html', 'bbb', 'width=300,height=200');
}
// ccc呼ぶ
function cccOpen(id) {
var sub = window.open('./ccc.html', 'ccc', 'width=300,height=200');
if (sub.document.getElementById('ccc-a') != null) {
// IE
if (id == 'a') {
} else {
}
} else {
// IE以外
sub.onload = function () {
if (id == 'a') {
} else {
}
}
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScript を使ってpkゲームを...
-
モーダルダイアログウィンドウ...
-
重複しないくじの作り方がわか...
-
「nullまたはオブジェクトでは...
-
<a>タグのテキストを取得
-
ActiveXobjectが作成できない
-
RadioButtonListの表示制御
-
jsファイルを使用して計算した...
-
任意の座標をクリックさせるには
-
文字列で条件分岐
-
イベントに適切な値が伝わらない
-
タブ画像を切り替えてクッキー保存
-
addEventListenerで
-
ホームページ内でのRSS表示の方法
-
リンクを新しい窓で開きたい
-
onchangeイベントを使ってspan...
-
同じIDで定義した要素の配列を...
-
イベントが初めの一回しか起き...
-
ASP.NETのコントロールの値をJa...
-
jspからjavascriptの変数引継ぎ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ActiveXobjectが作成できない
-
<a>タグのテキストを取得
-
重複しないくじの作り方がわか...
-
任意の座標をクリックさせるには
-
javascriptでCSVを呼出しvlookup
-
innerHTML実行後のイベント
-
HTML:Tableタグに対し、JavaScr...
-
onchangeイベントを使ってspan...
-
WordPressのコンタクトフォーム...
-
appendChildがieだとできない??
-
配列の大括弧と丸括弧はどう違う?
-
JavaScriptでオブジェクトを取...
-
【Tabキー】特定の範囲内だけで...
-
div要素内の全input要素をdisable
-
問題はbind の付いたリスナーを...
-
モーダルダイアログウィンドウ...
-
テキストボックスがブランクの...
-
javascript 特定のタグのidの存...
-
日本語入力の禁止
-
javascriptで編集可能不可能の...
おすすめ情報
文字数制限のため追加で書きます。
省略部分は以下の内容です。2か所共です。
if (id == 'a') {
sub.document.getElementById('ccc-a').style.display = '';
sub.document.getElementById('ccc-b').style.display = 'none';
} else {
sub.document.getElementById('ccc-a').style.display = 'none';
sub.document.getElementById('ccc-b').style.display = '';
}