2

を使用して、iframeJS を介してコンテンツ ドキュメントに HTML 文字列を書き込むことにより、HTML メール コンテンツを表示します。iframe表示された電子メールのリンクをクリックした場合、ユーザーがその中をナビゲートしたくありません。今、私はこれらのオプションを持っています:

  1. リンクを新しいブラウザ ウィンドウまたはタブで開く (推奨)
  2. すべてのナビゲーションを禁止する (次善、他に選択肢がない場合のみ)
  3. 私が知らないより良いオプション?

これら2つのオプションのいずれかを達成するにはどうすればよいですか?

HTML5がプロパティを導入したことは知っていsandboxますが、残念ながらそれはChromeとでしか機能しSafariないため、オプションではありません。

4

4 に答える 4

4

iframe が別のオリジンからのものである場合、このメソッドは、変更された場合に iframe ソースをリセットしてナビゲーションを防ぎます。

  var $iframe = $('iframe');
  var iframeUrl = 'http://example.com/foo';
  var iframeLoaded = false;
  $iframe.on('load', function () {
    if (!iframeLoaded) {  # Allow initial load of iframe.
      iframeLoaded = true;
      return;
    }

    # Reset iframe location back to original source to prevent navigation.
    iframeLoaded = false;
    $iframe[0].src = iframeUrl;
  });

残念ながら、iframe の読み込みの開始を検出する方法がないため、戻る前に新しいコンテンツを短時間フラッシュします。また、これによりブラウザの戻るボタンが壊れることにも注意してください。

于 2015-03-24T00:59:59.823 に答える
1

iframe 内のすべてのリンクをループして、target="_blank"それらに追加することができます。

(すみませんが、私はJQueryでこれを行う方法しか知らないので、質問でタグ付けされずにこの例をリンクして申し訳ありません):

$("#iframeID").contents().find("a").each(function() {
    $(this).attr("target", "_blank");
});

例: http://jsfiddle.net/yP7Nd/ - (私の JQuery コードの上の JS のビットは無視してください。IFrame コンテンツを適切にロードするには、これを行う必要がありました)。

于 2013-03-06T22:57:44.410 に答える
0

次のように、すべてのリンクを表示されたテキストに置き換えることができるはずです。

var links = document.links;
var i = links.length;
var link, text, node;

while (i--) {
  link = links[i];
  text = link.textContent || link.innerText || '';
  node = document.createTextNode(text);
  link.parentNode.replaceChild(node, link);
}

リンク コレクションはライブであるため、逆ループであることに注意してください。

于 2013-03-06T22:58:22.493 に答える