1

ダイアルアップを使用しているため、新しいタブで開くようにしたいページにボタンがたくさんあります。次のボタンをクリックする前に、戻るボタンを押してページが再度読み込まれるのを待つ必要があります。 .

ボタンのコードは次のようになります。

<button onclick="window.location.href='?act=stock&amp;i=273';return false;" class="wide">Stock in Shop</button>

<button onclick="window.location.href='?act=stock&amp;i=287';return false;" class="wide">Stock in Shop</button>

<button onclick="window.location.href='?act=stock&amp;i=193';return false;" class="wide">Stock in Shop</button>


私はどうにかして開始する URL に変更window.location.hrefし、元の onclick から href 部分を追加する必要があると思います...しかし、これについてどうすればいいのかわかりません.3時間答えを探しても役に立ちませんでした. window.open()http://www.felisfire.com/possessions?

お願いします!これらのボタンを Greasemonkey で変更するにはどうすればよいですか?


これまでのところ可能なコードですが、うまくいかないと思います:

var buttons = document.getElementsByClassName('wide');
for (var i = 0; i < buttons.length; i++) {
  buttons[i]=button.onclick="window.open('http://www.felisfire.com/possessions + *how do I get the part I need from the original onclick?*');">Stock in Shop</button>

}
4

2 に答える 2

1

ユーザースクリプトから作業するときは注意してonclickください。Greasemonkey の落とし穴を参照してください。

jQuery orquerySelectorAllを使用してボタンを取得してから、jQuery or を使用addEventListenerして新しいクリック ハンドラーを設定します。

以下は、古い onclick からキー ビットを抽出し、それをdata 属性に格納して、onclick を Web 2.0 ハンドラーに置き換えます。

var stockBtns   = document.querySelectorAll ("button.wide[onclick*='window']");

for (var J = stockBtns.length - 1;  J >= 0;  --J) {
    var oldClick    = stockBtns[J].getAttribute ("onclick");
    var payloadMtch = oldClick.match (/(act=.+?)';return/);
    if (payloadMtch  &&  payloadMtch.length > 1) {
        var payload = payloadMtch[1];
        //-- Don't use onclick!
        stockBtns[J].removeAttribute ("onclick");
        //-- Store payload value.
        stockBtns[J].setAttribute ("data-destQry", payload);

        //-- Activate click the proper way, especially for userscripts
        stockBtns[J].addEventListener ("click", openNewTab, false);
    }
}

function openNewTab (zEvent) {
    var baseURL     = "http://www.felisfire.com/possessions"
    /* Or be smart and use:
    var baseURL     = location.protocol + "//"
                    + location.host
                    + location.pathname
                    ;
    */
    window.open (baseURL + "?" + zEvent.target.getAttribute ("data-destQry") );
    return false;
}
于 2013-09-12T12:21:44.243 に答える