8

シナリオは、それらの間にさらに多くのリンクがある多数の html ファイルです。それらの最初のもの (インデックス) を呼び出すと、リンクは URL を介していくつかのパラメーターを渡します (それらをプリファレンスと呼ぶことができます)。

ここで、ページのいくつかのリンクのいずれかをクリックすると、それらのパラメーターが追加されるようにしたいと考えています。したがって、問題はこの他のもの (既に他のパラメーターとおそらくアンカーを含む URL にパラメーターを追加する方法) に似ていますが、リンクをクリックした直後に実行します。

1つの解決策が各リンクのonclickイベントを変更できることを知っていますが、通常のURL形式なしで何千ものイベントがある可能性があるため...先頭のスクリプトにある可能性のある解決策を探しています; おそらくonbeforeunloadイベントに関連する何か。

とにかく、私はそれを行う方法を見つけることができませんでした。何か案は?

4

2 に答える 2

11

これは、クリックされたときに href-attribute を含むものに文字列を追加します:

window.addEventListener("click", function(e) {
    var href = e.target.getAttribute("href");
    if(href) {
        location.href = href + "?q=stackoverflow";
        e.preventDefault();
    }
});​

例: http://jsfiddle.net/E5Q7P/

< IE9 では動作しません

于 2012-10-08T13:15:17.317 に答える
1

各リンクの onclick-attribute を変更したり、onbeforeunload-event を使用したりする代わりに、ページの読み込み時にすべてのアンカー要素に clickevent-listener をアタッチするのが 1 つの方法だと思います。コールバックは、ブラウザのデフォルトの動作をインターセプトして、リンクをたどることができます。次に、クリックされたばかりの a 要素の属性を取得しsrc、必要な設定を URL に追加してから、適切な URL に設定することにより、ユーザーを適切な場所 (設定を含む) に送信できwindow.location.hrefます。

MDN には、イベント リスナーに関するすばらしい記事があり、参考になると思います。古いバージョンの IE に関するセクションに特に注意してください。

それがどのように見えるかの非常に大雑把な例:

function callback(e){
  // Get the src of the clicked a-element
  var src = this.src;
  // Add preferences to the url, this need 
  // improvement depending on your needs
  src += "?somesetting=foo";
  // Send user to the url with preferences
  window.location.href = src;
}

// Get all anchors on page
var anchors = document.getElementsByTagName("a");

// Loop over the elements and attach listener
for(i=0 ; i < anchors.length ; i++){
  // Extend with support for older IE if needed
  anchors[i].addEventListener("click", callback, false});
}​
于 2012-10-08T12:09:31.010 に答える