【ズバリ回答2000ポイント】iframeの中に表示しているページ内のリンクをクリックした際、すべて_blankで開く方法はありますか?iframe内ページのHTMLの記述は変えないで可能な方法をご存じの方がいらっしゃいましたら、教えて下さい。

※重複した場合、先着とさせていただきます。ズバリな回答でなくとも、独断で恐縮ながら相応のポイントを送らせていただきます。
どうぞよろしくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/09/13 21:19:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.2

回答回数1314ベストアンサー獲得回数393

ポイント2000pt

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://prototypejs.org/download

id:baden

御回答ありがとうございます。完璧な回答です。どうもありがとうございます。終了後、2000ポイント送らせていただきます。

一点、追加になってしまうのですが、iframeを呼び出す側とiframe内のドメインが違う場合にも通用する方法というのはあるものなのでしょうか?

(ちなみに諸問題でドメインを統一する&iframe内側を書き換えるのが難しいだけで、iframeに先方のサイトを呼び出すことは許可をもらっています)

もしも存在しておりましたら、是非ご教授下さい。その際にも、もう2000ポイント送らせていただきます。

※Mook様には以前別の質問でも大変お世話になりました。私の方は相変わらず説明不足でして、恐縮です。

2009/09/13 17:04:31

その他の回答3件)

id:Mook No.2

回答回数1314ベストアンサー獲得回数393ここでベストアンサー

ポイント2000pt

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://prototypejs.org/download

id:baden

御回答ありがとうございます。完璧な回答です。どうもありがとうございます。終了後、2000ポイント送らせていただきます。

一点、追加になってしまうのですが、iframeを呼び出す側とiframe内のドメインが違う場合にも通用する方法というのはあるものなのでしょうか?

(ちなみに諸問題でドメインを統一する&iframe内側を書き換えるのが難しいだけで、iframeに先方のサイトを呼び出すことは許可をもらっています)

もしも存在しておりましたら、是非ご教授下さい。その際にも、もう2000ポイント送らせていただきます。

※Mook様には以前別の質問でも大変お世話になりました。私の方は相変わらず説明不足でして、恐縮です。

2009/09/13 17:04:31
id:gotovip No.3

回答回数118ベストアンサー獲得回数26

ポイント2000pt

iframeページの記述と使用している外部インタフェイスが不明なので、勝手にstrict関係と思い込んでの回答です。

はずしていたらポイントは結構です。

javaスクリプトでのリンク制御

http://www.tagindex.com/cgi-lib/q4bbs/patio.cgi?mode=view&no=219...

jQuery使用

http://www.kadoyan.com/item/515/


ちなみに読み込むコンテンツの記述も不可なのでしょうか?

id:baden

御回答ありがとうございます。参考にさせていただきます。終了後、2000ポイント送らせていただきます。

現在以下の状況でも、iframe内リンクをすべて_blankにする方法を調べています。

・iframeを呼び出す側とiframe内のドメインが違う

・iframe内に読み込まれるhtmlをいじることはできない

「できない」という御回答でも非常に意味がありますので、ご存じでしたらお教えいただけませんでしょうか?

その際は、再度ポイントを送らせていただきます。どうぞよろしくお願い致します。

2009/09/13 17:14:29
id:Mook No.4

回答回数1314ベストアンサー獲得回数393

ポイント2000pt

コメントが無効でしたので、再回答で失礼します。

できないという回答ですのでこちらはポイント不要です。


セキュリティの問題から、スクリプトは自ドメイン以外の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...

http://d.hatena.ne.jp/nopnop/20080405/1207370188

id:baden

御回答ありがとうございます。レギュラーな環境では不可ということが確定するだけでも前進しますので、大変に貴重な内容になります。

度重なる的を射ない質問に正確な御回答をお寄せいただき、どうもありがとうございます。大変に助かりました。

質問は終了させていただきます。皆様どうもありがとうございました。

2009/09/13 21:18:52
  • id:gotovip
    やはりMook様の結論も不可能ですか
    いろいろと調べてはみたものの私もセキュリティの問題で引っかかってしまってました
    子がどんな情報を扱っているのかわからないのでこれだ!と言えないのですが、
    打開策としてiframeの呼び出す子のページを親側でも用意する(同期するようなシステムを組めば大丈夫?)
    とかは不可でしょうか
    あとはドメイン統一か子のページを弄ってもらうしか…

    それからこんな中途半端な回答でこんなにポイントいただいてしまって大変申し訳ないです…
  • id:baden
    gotovip様
    コメントいただき、どうもありがとうございます。いただいた御回答は、検討する材料となりますので大変ありがたいものです。またご機会がありましたら、どうぞよろしくお願い致します。

この質問への反応(ブックマークコメント)

トラックバック

  • それはできますか? はてなの質問を見ていると「〜はできますか?」というような質問が良くある。 だいたい私が答えるのは技術系の質問なので、たいていの場合は「〜のようにすればで
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません