※重複した場合、先着とさせていただきます。ズバリな回答でなくとも、独断で恐縮ながら相応のポイントを送らせていただきます。
どうぞよろしくお願い致します。
iframe の親側の変更は可能でしょうか。prototype.js を使用した例です。
対象のリンクを習得するために iframe タグに ID を付けています。
http://feed.designlinkdatabase.net/feed/outsite_613.aspx
を参考にしましたが、下記は iframe 内のリンクを別ウィンドウで開くようにしたサンプルです。
<html> <head> </head> <body> <!--- 対象となる iframe :src は実際に合わせて変更---> <iframe id="targetFrame" src="http://myweb.com/child.html"></iframe> <script type="text/javascript" src="/js/prototype.js"></script> <script type="text/javascript"> <!-- var PopupWindow = Class.create(); PopupWindow.prototype = { initialize: function() { var t = document.getElementById('targetFrame'); var elements = t.contentWindow.document.getElementsByTagName('a') for (var i = 0, len = elements.length; i < len; i++) { Event.observe(elements[i], 'click', this.addPopupEvent.bindAsEventListener(this)); Event.observe(elements[i], 'keypress', this.addPopupEvent.bindAsEventListener(this)); } }, addPopupEvent: function(event) { var element = Event.element(event); var link = element.getAttribute('href'); window.open(link); Event.stop(event); } }; Event.observe(window, 'load', function () { new PopupWindow(); }); --> </script> </body> </html>
http://outdoor55.web.fc2.com/blog.html
↑上記はiframe内にブログを表示させています。
記事内にtarget="_blank"でリンクを3本貼ってあります。
別手法
御回答ありがとうございます。説明不足でしたが、「iframe内ページのHTMLの記述は変えないで」というのは、iframe内ページのHTMLのタグには、target="_blank"が付いていないという条件で、といった意味です。
target="_blank"指定のないタグを、iframeの外から強引にtarget="_blank"開き指定にできないか、といった質問になります。当方の記述不足でご面倒をいただいてしまい、大変恐縮です。終了後、1000ポイントでご了承下さい。
iframe の親側の変更は可能でしょうか。prototype.js を使用した例です。
対象のリンクを習得するために iframe タグに ID を付けています。
http://feed.designlinkdatabase.net/feed/outsite_613.aspx
を参考にしましたが、下記は iframe 内のリンクを別ウィンドウで開くようにしたサンプルです。
<html> <head> </head> <body> <!--- 対象となる iframe :src は実際に合わせて変更---> <iframe id="targetFrame" src="http://myweb.com/child.html"></iframe> <script type="text/javascript" src="/js/prototype.js"></script> <script type="text/javascript"> <!-- var PopupWindow = Class.create(); PopupWindow.prototype = { initialize: function() { var t = document.getElementById('targetFrame'); var elements = t.contentWindow.document.getElementsByTagName('a') for (var i = 0, len = elements.length; i < len; i++) { Event.observe(elements[i], 'click', this.addPopupEvent.bindAsEventListener(this)); Event.observe(elements[i], 'keypress', this.addPopupEvent.bindAsEventListener(this)); } }, addPopupEvent: function(event) { var element = Event.element(event); var link = element.getAttribute('href'); window.open(link); Event.stop(event); } }; Event.observe(window, 'load', function () { new PopupWindow(); }); --> </script> </body> </html>
御回答ありがとうございます。完璧な回答です。どうもありがとうございます。終了後、2000ポイント送らせていただきます。
一点、追加になってしまうのですが、iframeを呼び出す側とiframe内のドメインが違う場合にも通用する方法というのはあるものなのでしょうか?
(ちなみに諸問題でドメインを統一する&iframe内側を書き換えるのが難しいだけで、iframeに先方のサイトを呼び出すことは許可をもらっています)
もしも存在しておりましたら、是非ご教授下さい。その際にも、もう2000ポイント送らせていただきます。
※Mook様には以前別の質問でも大変お世話になりました。私の方は相変わらず説明不足でして、恐縮です。
iframeページの記述と使用している外部インタフェイスが不明なので、勝手にstrict関係と思い込んでの回答です。
はずしていたらポイントは結構です。
javaスクリプトでのリンク制御
http://www.tagindex.com/cgi-lib/q4bbs/patio.cgi?mode=view&no=219...
jQuery使用
http://www.kadoyan.com/item/515/
ちなみに読み込むコンテンツの記述も不可なのでしょうか?
御回答ありがとうございます。参考にさせていただきます。終了後、2000ポイント送らせていただきます。
現在以下の状況でも、iframe内リンクをすべて_blankにする方法を調べています。
・iframeを呼び出す側とiframe内のドメインが違う
・iframe内に読み込まれるhtmlをいじることはできない
「できない」という御回答でも非常に意味がありますので、ご存じでしたらお教えいただけませんでしょうか?
その際は、再度ポイントを送らせていただきます。どうぞよろしくお願い致します。
コメントが無効でしたので、再回答で失礼します。
できないという回答ですのでこちらはポイント不要です。
セキュリティの問題から、スクリプトは自ドメイン以外のDOMを操作することはできません。
もしこれを行う方法が見つかったとすると、それはセキュリティホールとして各ブラウザ、もしくはWebサーバ、は早急に対策パッチでそれをふさぐことになるでしょう。
もしこれを可能とするのであれば、ユーザがセキュリティレベルを意識的に下げた環境(Windows の ActiveX の実行)を許可したようなケースになります。
今回の質問の目的が OS やブラウザに限定されない汎用的なものを想定しているのであれば、他ドメインの DOM の操作はできないと考えたほうが良いでしょう。
特定の環境下で実現方法を求めているのであれば、ある程度は可能かもしれません。
個人のページですが下記のような記事もありました。
http://d.hatena.ne.jp/fits/20090301/1235879562
コメントを有効にしていただければ、このような点は手軽に捕捉できますので、有効にしていただけると助かります。
関連記事
http://openlab.dino.co.jp/2008/11/07/193329349.html
http://ido.nu/kuma/2008/09/06/visiting-chrome-security-check-imp...
御回答ありがとうございます。レギュラーな環境では不可ということが確定するだけでも前進しますので、大変に貴重な内容になります。
度重なる的を射ない質問に正確な御回答をお寄せいただき、どうもありがとうございます。大変に助かりました。
質問は終了させていただきます。皆様どうもありがとうございました。
御回答ありがとうございます。完璧な回答です。どうもありがとうございます。終了後、2000ポイント送らせていただきます。
一点、追加になってしまうのですが、iframeを呼び出す側とiframe内のドメインが違う場合にも通用する方法というのはあるものなのでしょうか?
(ちなみに諸問題でドメインを統一する&iframe内側を書き換えるのが難しいだけで、iframeに先方のサイトを呼び出すことは許可をもらっています)
もしも存在しておりましたら、是非ご教授下さい。その際にも、もう2000ポイント送らせていただきます。
※Mook様には以前別の質問でも大変お世話になりました。私の方は相変わらず説明不足でして、恐縮です。