0

フォーラム用のGreasemonkeyスクリプトを作成しています。このスクリプトでは、作成した投稿で[送信]をクリックすると、[投稿が投稿されました]という通知ページが表示されます。

このページを完全にスキップして、これを回避しようとしています。

これまでのところ、私が思いついた唯一の解決策は次のとおりです。

// @include        *posting.php?mode=reply*
// ==/UserScript==
// @run-at document-start

{
location.href = document.referrer
}

それはおそらく完全な回り道ですが、私が探していたものではありません。確認ページを完全にスキップして、すぐに表示されていたページにリロードして戻したいと思っています。私も試しhistory.go(-1)ましたが、サイコロはありません。

それらの線に沿って何かを達成する方法はありますか?

4

2 に答える 2

0

AJAXで投稿してください。そうすれば、メッセージページに移動するのを避けることができます。応答を取得して、それを使ってやりたいことを何でもします。

jqueryベースのajax

   $("#submitButtonId").click(function() {

    var url = "path/to/your/script.php"; // the script where you handle the form input.

    $.ajax({
           type: "POST",
           url: url,
           data: $("#idForm").serialize(), // serializes the form's elements.
           success: function(data)
           {
               alert(data); // show response from the php script.
           }
         });

    return false; // avoid to execute the actual submit of the form.
});
于 2012-07-21T20:09:50.040 に答える
0

スクリプトがうまく機能しなかった理由は、投稿したコードにエラーがあるためです。メタデータブロックが破損しており、@run-atディレクティブがブロックの外にあります。

追加の問題:

  1. おそらくlocation.replace()、確認ページが履歴や戻るボタンを乱雑にしないようにするために使用する必要があります。
  2. @include *posting.php?mode=reply*Firefoxのすべてが不必要に遅くなります。これは、GreasemonkeyがすべてのURLを文字ごとに詳細に比較する必要があるためです。

    @includesあなたがそれを助けることができるならば、複数文字のワイルドカードで始めないでください(またはどんなプログラミング言語でのどんな比較でも)。次のように複数のインクルードを用意することをお勧めします。

    // @include     http://SITE_1/posting.php?mode=reply*
    // @include     http://SITE_2/posting.php?mode=reply*
    //etc.
    


したがって、このスクリプトは十分に機能するはずです。実際には、確認ページは表示されません(私はこの手法を自分で使用しています):

// ==UserScript==
// @name        Whatever
// @include     http://SITE_1/posting.php?mode=reply*
// @include     http://SITE_2/posting.php?mode=reply*
// @include     http://SITE_3/posting.php?mode=reply*
// @run-at      document-start
// ==/UserScript==

location.replace (document.referrer);


Rab Nawazの回答の ようなアプローチは、より優れたUIエクスペリエンスを提供できますが、彼の回答が示すほど単純ではないことに注意してください。通常のフォーラムページで、多くのフォーム、ボタン、リンクをキャプチャする必要があります。すべてが同じ宛先に投稿されるわけではなく、結果の処理方法はアクションによって大きく異なります。

これlocation.replace()は、潜在的に大きなコードの複雑さに対するUIの滑らかさの良いトレードオフです。

于 2012-07-22T03:38:22.297 に答える