Meu Tico バナー カウンター
Meu tico>ティップス>ジャバスクリプト

TopTop
はてなだいあり〜Diary
review:musicMusic
review:bookBook
review:CINEMACinema
PhotoPhoto
Homepage TipsTips
カフェChat
BBSBBS
リンクLink  
Tipsのトップに戻る
別フレームから文字列を取得して、新しいウィンドウに表示する。
別フレームから文字列を取得して、新しいウィンドウに表示する。


別フレームの選択された文字列を新しいウィンドウに表示させるには?

イメージがしにくい方や 何をやろうとしているかわからない方は、サンプルをクリックして実際に試してみてください。

サンプルはこちら

サンプルをダウンロードする(frame.zip)



フレームの構造

 Frame.html (フレーム設定ページ)
   −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−



 a.html(文字列を選択するページ ・・・フレーム名は、framea )
  −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
  
 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−


 b.html(ボタンがあるページ ・・・・フレーム名は、frameb)
となってます。
   −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
   
   −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−






解説 (b.htmlのスクリプト)


b.html(ボタンのあるページ)には下のようなスクリプトがあります。



<SCRIPT language=javascript>
<!--
function op(){

if (window.getSelection){
selectedText=window.parent.framea.getSelection().toString();//Firefox,Safari用
selectedText= selectedText.replace("\n","<BR>"); //改行を<BR>に変換
}
else if (document.getSelection){
selectedText=parent.framea.document.getSelection();/NN用
selectedText= selectedText.replace("\n","<BR>"); //改行を<BR>に変換
}
else if (document.selection){
selectedText=parent.framea.document.selection.createRange().htmlText; //IE用
}

if(selectedText){
WO=document.open("","test","scrollbars=yes, width=300, height=200,toolbar=yes,location=yes,directories=yes,outerWidth=300,outerHeight=200,left=100,top=100");

WO.document.open();
WO.document.write("<HTML><BODY>\n");
WO.document.writeln(selectedText);
WO.document.write("</BODY></HTML>\n");
WO.document.close();
}

}
//-->
</SCRIPT>

*赤文字部分が選択文字列を取得するフレームの名前


b.html (ボタン)のページから、<INPUT onclick=op() type="button" value="選択範囲を新しいウィンドウで表示" name="btnStart">などで、関数op()を呼び出せば、

文字列が選択されていれば新しいページに書き出します。





b.html (ボタン)のページから、<INPUT onclick=op() type="button" value="選択範囲を新しいウィンドウで表示" name="btnStart">などで、関数を呼び出せば、

文字列が選択されていれば新しいページに書き出します。



*注意事項。
Javascriptを使い、フレーム間で選択文字列やクリップボードなどのデーターを扱う場合は、フレームが基本的に同じサイト内のページの場合しかできないみたいです。(セキュリティの関係から

Javascriptで アクセスが拒否されました とエラーが出る場合、このところにひっかかっている場合があります。
↑のframe.html,a.html,b.htmlをデスクトップなどに保存して
ローカルでIEで実行するとよくわかるのですが、不明なゾーンとなってしまい、アクセスが拒否されてしまいます。
ローカルで実行したいのならば、Firefoxなどのブラウザをつかうしかないようです。
  (IEでローカルでやる方法がわかりませんでした。)

IEの場合はめんどくさいですが、サーバーにアップして確認するとエラーはでません。

あくまで、これはセキュリティ上の問題でローカル(不明なゾーン)では、フレーム間のデーター受け渡しができないものと思われます。



参考
------------------------------------------------------------------
選択された範囲の文字を得る関数 関数 対応ブラウザ (括弧付きは下位互換対応)

document.getSelection() Netscape Communicater 4.0 以上、Mozilla、(Firefox)
document.selection() Internet Explorer 4.0 以上
document.selection.createRange().text Internet Explorer 4.0 以上
window.getSelection() Firefox、Safari
window._content.getSelection().toString() Firefox、Mozilla
( ↑toString() をつけないと、DOM2 の Range オブジェクトになるらしい。)

------------------------------------------------------------------