1

クリックされたリンクの URL が別のホストを指しているかどうかを確認するための素敵で気の利いた方法はありますか?

$(document).ready(function() {
    $('a[target="_blank"]').click(function() {
        if (confirm('This link will open in an new window.')) {
            return true;
        } else {
            return false;
        }
    });
});

別のホストを指し、属性を追加するすべてのリンクをフィルタリングするために、CMS に頼ることはできませんtarget="_blank"。そこで、クリックされたリンクの URL をテストしたいと思います。これは、より堅牢なテストだと思います。

string starts withさまざまなシナリオをテストするカスタム コードを記述できることはわかっています。しかし、これに適した jQuery (または他の何か) 関数は既にありますか?

解決:

ご協力いただきありがとうございます!このソリューションを適用しました:

$(document).ready(function() {
    $('a').click(function() {
        if (this.host != location.host) {
            $(this).attr('target', '_blank'); // add or override the attribute (in case there isn't one already)
            return confirm('This link will open in an new window.');
        }
    });
});

ところで: このコードは、サイトがモバイル モード (modernizr を使用) の場合にのみ使用します。したがって、アプリケーションをラップしPhoneGapて、ユーザーがランダムなサイトでフルスクリーン モードのままになるのを防ぐことができます。

4

4 に答える 4

3

Anchorlocation.host要素のhost.

$('a').click(function() {
  if (this.host != location.host && confirm('This link will open in an new window.')) {
    $(this).attr('target', "_blank");
  }
  // don't need else, let it be the default behavior of anchor
  // if you don't want to jump to the new page, then add else return false
});
于 2012-09-28T03:15:23.243 に答える
1

hostリンクのプロパティをチェックして、現在のWebサイトのホストと一致するかどうかを確認できます。

$('a').click(function() {
  if (this.host != window.location.host) {
     // do something like
     $(this).attr('target', "_blank");
  } else {
     // do something else
  }
});
于 2012-09-28T03:09:36.070 に答える
0

ライブフィドルを見る

通常、外部リンクはで始まるhttp:// ので、これを試してください

 $('a[href^="http://"],a[href^="https://"]').on('click', function(){
     if (confirm('This link will open in an new window.')) {
            return true;
        } else {
            return false;
        }

});
于 2012-09-28T03:09:06.163 に答える
0

ページ上のすべてのリンクにクリック ハンドラーを追加できます。

jQuery('a').click(function() {
  if (this.href.indexOf('http://') == 0) {
    return confirm('Leaving, OK?');
  }
});

しかし、それは多くの要素にイベント ハンドラーを追加することであり、非効率的である可能性があります。

より効率的な方法は、ドキュメントにクリック ハンドラーを追加することです。Aタグのクリックが泡立ち、それらすべてを一気にキャッチすることができます. お気に入り:

jQuery(document).click(function(e) {
  if (e.target.tagName == 'A') {
    if (e.target.href.indexOf('http://') == 0) {
      return confirm('Leaving, OK?');
    }
});

実際の「is external」チェックでは、もちろん「http://」または「https://」が必要です。

編集:

@hsalamaの答えの方が好きだと思います。私はそれを次のように変更しますが:

jQuery('a[href^="http://"]').add('a[href^="https://"]').click(function() {
  return confirm('This link will open in an new window.');
});

ところで、次のことを行います。

if (condition) {
  return true;
} else {
  return false;
}

他のプログラマーにからかわれるだけです。ただ:

return condition;
于 2012-09-28T03:13:29.667 に答える