別フレームのタグ属性を取得する方法

このQ&Aのポイント
  • 左右に分割した左フレームから、右フレームのタグ属性を取得する方法について質問させていただきます。
  • 左側フレームでタグ属性を取得するために、JavaScriptを使用しましたが、一部のスクリプトが実行されずに停止してしまいます。
  • 右側フレームの内容には、章や節のタグが含まれています。
回答を見る
  • ベストアンサー

別フレームのタグ属性を取得する方法

いつもお世話になります。 左右に分割した左フレームから、右フレームのタグ属性を取得することはできないでしょうか。 過去ログ http://oshiete1.goo.ne.jp/kotaeru.php3?q=371451 を見て、 flm.htmlで、 <frame name="left" src="tst_fll.html" scrolling="auto" target="top"> <frame name="main" src="tst_flr.html" scrolling="auto" target="_self"> 左側フレームtst_fll.htmlで、 <script type='text/javascript'><!-- document.write("右側フレームの<br>タグ属性を取得<br>") alert("1 aaaaaこれは表示される"); var obj = window.main.document.getElementsByTagName("*"); alert("2 bbbbbこれは表示されない"); var len = obj.length; for (var i=0;i<len;i++){ var tagName = obj[i].tagName var hrefName = obj[i].id; var ttl = obj[i].title; document.write(ttl); } //--> </script> としてみたのですが、 alert("1 aaaaaこれは表示される"); までは、スクリプトが実行されるのですが、 alert("2 bbbbbこれは表示されない"); は、表示されず、この前でスクリプトが停止されてしまいます。 また、右側フレームtst_flr.htmlの内容は、以下のようなものです。 <h4 id="00" title="0章<br>">第0章</h4> <h4 id="01_fold" title="1章">第1章</h4> <h5 id="01_01" title="1-1">1-1</h5> <h5 id="01_02_fold" title="1-2">1-2</h5> <h6 id="01_02_01" title="1-2-1">1-2-1</h6> <h6 id="01_02_02" title="1-2-2">1-2-2</h6> <h5 id="01_03" title="1-3<br>">1-3</h5> よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • talepanda
  • ベストアンサー率58% (45/77)
回答No.1

mainウィンドウはframesetに属するウィンドウなので var obj = window.main.document.getElementsByTagName("*"); は var obj = window.top.main.document.getElementsByTagName("*"); もしくは var obj = window.parent.main.document.getElementsByTagName("*"); では?

rqg2010
質問者

お礼

talepandaさん、レスありがとうございます。 できました。 .parentを付けることにより取得できました。 どうもありがとうございました。

関連するQ&A

  • setTimeoutでelementを渡す方法

    setTimeoutの引数にdocument.getElementByIdの情報を格納して 他の関数に渡すことはできないのでしょうか? 下記は自分で調べた内容ですが、aaa()で変数mにdocument.getElementByIdを格納して setTimeoutの引数にその変数を指定してbbb()に渡しましたが使うことができませんでした。 [object HTMLDivElement]は渡っているようですが、tagNameでDIVが表示されません。 ccc()のように普通に渡した場合はちゃんと使えました。 データはちゃんと送られているのに、setTimeoutではなぜtagNameなどで表示されないのでしょうか。 <html lang="ja"> <head> <title>サンプル</title> <script> function aaa() { var m = document.getElementById("xxx"); alert(m); //[object HTMLDivElement] alert(m.tagName); //DIV var p = 777; setTimeout("bbb('"+m+"',"+p+")",1000); ccc(m,p); } function bbb(m,p){ alert(m); //[object HTMLDivElement] alert(m.tagName); //undefined alert(p); //777 } function ccc(m,p){ alert(m); //[object HTMLDivElement] alert(m.tagName); //DIV alert(p); //777 } </script> </head> <body onload="aaa()"> <div id="xxx">サンプル</div> </body> </html>

  • <h*>タグを一斉にチェックできないでしょうか

    お世話になります。 <h4 id="01" title="1章">第1章</h4>  <h5 id="01_01" title="1-1">1-1</h5>  <h5 id="01_02" title="1-2">1-2</h5>   <h6 id="01_02_01" title="1-2-1">1-2-1   </h6>  <h5 id="01_03" title="1-3|<br>">1-3</h5> <h4 id="02" title="2章">第2章</h4> と、いうようにhtmlを書いて、 function HTagItem(ID,TitleOrg){ this.ID=ID; this.TitleOrg=TitleOrg; this.Href='<a href="#'+ID+'">'+TitleOrg+'</a>'; } と、関数を定義し、 Menu_HTag = new Aray( new HTagItem('01','1章'), new HTagItem('01_01','1-1'), new HTagItem('01_02','1-2'), new HTagItem('01_02_01','1-2-1'), new HTagItem('01_03','1-3'), new HTagItem('02','2章'), ); と、いう配列を得たく苦慮しています。 obj=document.getElementsByTagName("h"+HNo) で、HNoに順次4,5,6を代入してループを作り Menu_HTagをIDでソートすればできます。 しかし、この方法だと<h*>タグのIDを常に意識していないと順番がhtmlに記載順で無くなってしまいます。 <h*>タグを途中に挿入したときなどIDを全て付け直す必要があります。これでは混乱してしまいます。 そこで、要はhtmlに書いた順番に<h*>タグの配列が作成できれば良いわけですので、<h4>を調べて次に<h5>を調べてというのでなく<h*>をhtmlに記載された順に一時に調べることはできないものでしょうか。 DOMとして階層を成しているパターンでも無いようですので行き詰まってしまいました。 どうかよろしくお願いいたします。

  • 画像のサイズが取得できません

    Internet Explorer の右クリックメニュー拡張用スクリプトを作っています。 画像上で右クリックすると画像のサイズが表示されるようにしたいのですが、うまくいきません。 <script type = "text/javascript">  var parentWindow = window.menuArguments;  var eventSource = parentWindow.event.srcElement;  var tagName = eventSource.tagName.toUpperCase();  var URL;  if (tagName == "IMG") {   URL = eventSource.src;   var newImg = new Image();   newImg.src = URL;   alert("画像のサイズは " + newImg.width + "×" + newImg.height);  }; </script> これにより、たとえばこのOKWaveのページの左上にあるロゴは   画像のサイズは 220 × 54 と表示されますが、 たとえば http://goo.gl/I9bEQf では   画像のサイズは 0 × 0 となってしまいます。 なぜでしょうか? 原因と解決法を教えていただけると嬉しいです。

  • ボタンに書かれている文字の入れ替え

    2つのボタンのどちらを押しても、ボタンに書かれているアルファベットが入れ替わるようにしたいのですが、うまくいきません。 alert(obj1)、alert(obj2)などとして、A,Bともに読み込まれているようなのですが、alert(tmp)の時はundefinedがでます。 どこが間違っているのかよろしければ教えてください。 <!doctype html> <html> <head> <meta charset="utf-8"> <title>勉強中</title> </head> <body> <script> function change_alphabet() { var tmp; var obj1 = document.getElementById("button_1").value; var obj2 = document.getElementById("button_2").value; // alert(obj1); // alert(obj2); tmp = obj1.innerHTML; // alert(tmp); obj1.innerHTML = obj2.innerHTML; obj2.innerHTML = tmp; // alert(obj2); } </script> < input type = "button" id = "button_1" value = "A" style = "width: 25px; height: 25px" onclick = "change_alphabet()" > < input type = "button" id = "button_2" value = "B" style = "width: 25px; height: 25px" onclick = "change_alphabet()" > <body> </html>

  • 他のフレームのスクリプトを実行させたい

    フレームを左右に分割しています。 左フレームの数値を変えるselect optionがあって、その数値の変更によって右のフレームのスクリプトを実行させたいのですが、どのようにするのでしょうか? -----------左フレーム------------- <script> function keisann(){ //計算部分 //右フレームへ変数の引き渡し //右フレームのスクリプトの実行____ここの記述がわかりません。 } var i,ht =[],d; i=0; d=50; ht=new Array; ht[i] = '<select onChange="keisann()" id="s_yoko">'; for( var i=0; i<=100;) ht[i] = '<option value='+i+(i==d?' selected':'')+'>'+(i++)+'</option>'; ht[i] = '</select>'; document.write('横寸法 = ', ht.join(''),'<BR>'); </script>

  • ソースが難しくて初心者にわかるようにどなたか教えて

    https://okwave.jp/qa/q9365480.html の続き 初心者なのでソースだけではわかりません。 もう少し具体的に何をやっているか教えていただければ幸いです。 >>> functionaddCR( obj ){ id=obj.id; strArray[ id - 0 ]+='\r\n'; alert(obj.parentNode.outerHTML) obj.innerHTML+='<br>'; } 恐らくここで、テキストをクリックしたとき、クリックした場所で改行されるようですが、もう少し初心者にわかるように解説いただけませんか? これは何を再代入しているのですか? id=obj.id; 変数A += 変数Bは、変数A = 変数B+変数Aなので、 配列になにかしているのですか? strArray[ id - 0 ]+='\r\n'; なぜこれでクリックしたところにbrがつくのでしょうか? obj.innerHTML+='<br>'; https://codepen.io/anon/pen/xLWmZv ソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>test</title> </head> <body> <textarea>ここに文章を入力してください</textarea> <button>表示</button> <button>出力</button> <textarea id="out" readonly></textarea> <div id="disp"></div> <script type="text/javascript"> varstrArray; functionaddCR( obj ){ id=obj.id; strArray[ id - 0 ]+='\r\n'; alert(obj.parentNode.outerHTML) obj.innerHTML+='<br>'; } functiondisp(){ var str=document.getElementsByTagName('textarea')[0].value; strArray=str.split(''); vardiv=document.getElementById('disp'); div.innerHTML=''; var aProto=document.createElement('a'); for( var i =0, len=strArray.length; i<len; i++ ){ vara=aProto.cloneNode(1); a.onclick=function(){ addCR(this); } a.innerText=strArray[ i ]; a.id=i div.appendChild(a); } } functionoutput(){ var outText=document.getElementsByTagName('textarea')[1]; outText.value=strArray.join("") } document.getElementsByTagName('Button')[0].onclick=function(){ disp() } document.getElementsByTagName('Button')[1].onclick=function(){ output() } </script> </body> </html>

  • javascriptで別ファイルで変数を取得する。

    A.htmlで入力した文字をB.htmlに出るようにしたいのですが、全然出ません。 アラートは表示されるのですが、入力欄に何を打っても、 namae と出てしまいます。変数に何も入ってないようです。 これを〔javascript〕って入力すれば、アラートに〔javascript〕って出るようにしたいのですが、どうしたらよろしいでしょうか? 〔A.html〕 <script type="text/javascript"> var val=namae; window.localStorage.setItem("result", val); </script> <form action="B.htm" id="form1" method="post" onsubmit="check()"> <p>名前<br><input type="text" name="namae" id="buttom" size="28" /></p> <input type="submit" value="送信"/> </form> 〔B.html〕 <script type="text/javascript"> var val = window.localStorage.getItem("result"); alert(val); </script>

  • イベントに適切な値が伝わらない

    0から9までidをもつdivを用意して、それぞれクリックしたら そのidを表示したいのですが、なぜかどれをクリックしても 表示されるのは「10」でした。以下のやり方では何がいけないのでしょうか? function sample(){ for(i=0; i<10; i++){ var obj = document.getElementById(i); obj.onclick = function(){ sample_alert(i); }; } } function sample_alert(i){ alert("i="+i); } window.onload = function() { sample(); } for($i=0; $i<10; $i++){ print "<div id=\"{$i}\">{$i}</div><br>\n"; }

  • window.openでフレームページを開いたときのフレーム名Object生成について

    いつもお世話になります。 今回、別の方の疑問に答えるためにフレームページの検証を重ねるうちに変な現象に行き当たってしまいました。 下記のようなJavaScriptを組み込んだページで、スクリプト内の関数から「sFramePageURL」で指定される 「frame01」及び「frame02」から構成されるフレームページを開いた際、新窓内のフレームにおけるObjectの 生成状況がブラウザによって異なります。 このリストの場合は「frame02」を監視しています。 「新しい窓を開いてFrame確認」のボタンを押すと、多少の時間差はあるのですが  IE 8  FireFox 3.0.10  Opera 9.63  Netscape 7.1 はObjectが生成されます。 ところが Safari 3.1.1 GoogleChrome 2.0.172.31 に関してはチェック回数や時間間隔をどう増やしてみてもいっこうに生成されません。 処理終了後に「新しい窓のFrame確認」ボタンで確認するとしっかりとObjectが確認できるのですが・・・ この差異は仕様によるものでしょうか単なるバグでしょうか? また、これをSafari及びChromeで回避する(同一プロセス内でObject生成できる)手法などございましたらご教授お願いいたします。 ********************************************************* 作成した実験用ページ:ここから <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>TEST</title> </head> <SCRIPT Language="JavaScript"> <!-- var FrameContent_TEST; var sFramePageURL = 'http://www.hogehoge.jp/test/FramePage.html'; var sWinName = 'TestPage'; function fShowFramePage(){ FrameContent_TEST = window.open(sFramePageURL,sWinName,'width=800,height=700,scrollbars=1'); FrameContent_TEST.focus(); // *********************************** alert(typeof(FrameContent_TEST.frame02)); alert(typeof(FrameContent_TEST.frame02)); alert(typeof(FrameContent_TEST.frame02)); // *********************************** return true; } function fConfirmFramePage(){ // *********************************** alert(typeof(FrameContent_TEST.frame02)); // *********************************** return true; } //--> </SCRIPT> <body> <br> 試験フレーム1【ページ開く】<input type="button" value="新しい窓を開いてFrame確認" name="B1" onClick="fShowFramePage();"><br> 試験フレーム2【フレームチェック】<input type="button" value="新しい窓のFrame確認" name="B2" onClick="fConfirmFramePage();"><br> <br><br> </body> </html> ********************************************************* 作成した実験用ページ:ここまで

  • 2つのプルダウンの結果を別フレームへ

    はじめまして。一方のフレームには2つのプルダウンを作りボタンクリックでその結果(リンク)をもう一方のフレームで表示させたいのですが、うまくいかず困ってます。どなたかよろしくお願いします。 それぞれフレームの名前は、 プルダウンのフレーム・・・・・top それを表示させたいフレーム・・und  と付けました。 プルダウンの方のソースは以下のようになってます。 <!--webbot bot="HTMLMarkup" startspan --> <form name="doublecombo" > <p><select name="example" size="1" onChange="redirect(this.options.selectedIndex)"> <option>月曜日</option> <option>火曜日</option> </select><br><br> <select name="stage2" size="1"> <option>時限選択</option> </select><br><br> <input type="button" name="test" value="時間割" onClick="go()" > </p> <script> <!-- var groups=document.doublecombo.example.options.length var group=new Array(groups) for (i=0; i<groups; i++) group[i]=new Array() group[0][0]=new Option("1時限","/○○○.html") group[0][1]=new Option("2時限","/○○○.html") group[0][2]=new Option("3時限","/○○○html") group[1][0]=new Option("1時限","/○○○.html") group[1][1]=new Option("2時限","/○○○.html") group[1][2]=new Option("3時限","/○○○.html") var temp=document.doublecombo.stage2 function redirect(x){ for (m=temp.options.length-1;m>0;m--) temp.options[m]=null for (i=0;i<group[x].length;i++){ temp.options[i]=new Option(group[x][i].text,group[x][i].value) } temp.options[0].selected=true } function go(){ location=temp.options[temp.selectedIndex].value } //--> </script>