0

我正在为一个论坛编写一个 Greasemonkey 脚本,如果你在你写的帖子上点击“提交”,你将被带到一个通知页面,上面写着“你的帖子已发布”。

我试图通过完全跳过这个页面来解决这个问题。

到目前为止,我想出的唯一解决方案是:

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

{
location.href = document.referrer
}

这可能是一个完整的迂回方式,但这并不是我想要的。我希望完全跳过确认页面,然后立即重新加载回您刚才所在的页面。我也试过history.go(-1),但没有骰子。

任何想法如何实现这些目标?

4

2 回答 2

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 回答
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 回答