Javascript 如何跳过论坛';谁的确认页?

Javascript 如何跳过论坛';谁的确认页?,javascript,redirect,greasemonkey,Javascript,Redirect,Greasemonkey,我正在为一个论坛写一个Greasemonkey脚本,如果你在你写的帖子上点击“提交”,你会被带到一个通知页面,上面写着“你的帖子已经发布” 我试图通过完全跳过这一页来绕过这个问题 到目前为止,我提出的唯一解决方案是: // @include *posting.php?mode=reply* // ==/UserScript== // @run-at document-start { location.href = document.referrer } 这可能是一种完全迂回的方

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

我试图通过完全跳过这一页来绕过这个问题

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

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

{
location.href = document.referrer
}
这可能是一种完全迂回的方式,但这并不是我想要的。我希望完全跳过确认页面,然后立即重新加载到您刚刚看到的页面。我尝试了
历史。也尝试(-1)
,但没有骰子


你有什么想法可以实现这些目标吗?

用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.
});

脚本无法正常工作的原因是,您发布的代码中存在错误。已损坏,
@run at
指令在块之外

其他问题:

  • 您可能应该使用
    location.replace()
    来避免确认页面将历史记录和后退按钮弄乱
  • @include*posting.php?mode=reply*
    将不必要地降低所有Firefox的速度。这是因为Greasemonkey必须对每个URL进行深入的字符比较

    如果可以的话,不要使用多字符通配符启动
    @includes
    (或任何编程语言中的任何比较)。最好使用多个includes,如:

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

  • 因此,这个脚本对您来说应该足够好:在实践中,您永远不会看到确认页面(我自己使用这种技术):

    /==UserScript==
    //@name随便什么
    //@包括http://SITE_1/posting.php?mode=reply*
    //@包括http://SITE_2/posting.php?mode=reply*
    //@包括http://SITE_3/posting.php?mode=reply*
    //@在文档开始时运行
    //==/UserScript==
    位置.替换(文件.引用人);
    

    请注意,像这样的方法可以提供更好的UI体验,但这并不像他的答案所显示的那样简单。你需要在一个典型的论坛页面上捕获许多表单、按钮和链接。所有内容都不会发布到同一个目的地,你将如何处理结果取决于具体操作


    location.replace()
    是UI平滑度与潜在的巨大代码复杂度之间的一个很好的折衷。

    不过,我不知道如何获得问题的“响应”。首先,我要感谢你们两位的回复,特别是Rab更新了他的答案,并跟进了实际的代码。然而,我仍然感到困惑,我担心,我无法回答我要求更多的帮助真是太糟糕了。有没有可能我会如此粗鲁地用一种更简单的方式向我解释呢?我能提供什么信息让你更容易解释吗?再一次,我非常抱歉。老实说,你在理解哪一部分方面有问题,我一开始就开始问自己行。#submitButtonId必须是“button1路障”或“提交”。至于第三行,我不确定引用的是哪一个脚本。是手头的页面,即/*/viewtopic.php,提交按钮所在的页面,还是*posting.php?mode=reply,这是我试图跳过的页面?(另外,我猜代码不支持星号,所以如果这两种情况中的任何一种都是这样的话,那么我该如何做这些行的通配符呢?至于其余的-我不知道了。不确定idForm指的是什么。这不是一个jQuery问题。这个答案也不适用于Greasemonkey场景。这段代码没有加载正确的pa吗ge?它应该在很多论坛上出现。如果是这样,问题是什么?没有滚动到最后一篇文章?我们也需要论坛的确切细节。确切的URL是最好的;论坛类型(如“phpBB”)至少。问题是它仍然加载下一个页面,而不是完全跳过。您发布确认页面,然后它返回。我的脚本仍然加载conf页面,然后再次返回线程。我希望完全跳过conf页面。这是一个phpBB 3论坛,有问题的URL是…com/viewtopic.php?(使用快速回复查看/回复)->转到.com/posting.php?mode=reply(这是我希望跳过的页面)。如果可能,仅当单击“提交”按钮时。这正是我要找的Brock,谢谢。是否有办法仅当按下特定按钮时触发它?(即提交按钮,因为有另一个具有相同url的页面由于此脚本而不再工作)是的,当它触发时,你可以缩小范围,可能是通过比较URL参数或引用人。最坏的情况可能会变得复杂。如果没有关于何时要跳过重定向和何时不跳过重定向的精确细节,我无法获得更具体的信息。准确的URL是最好的选择。屏幕截图可能会有所帮助……看起来这个问题,如上所述,已经得到了回答。也许最好打开一个新问题,包括我们需要的额外更改和帮助您所需的详细信息。如果我没有想到这个案例本身是如此荒谬和琐碎,我会毫不犹豫地提出另一个问题。哈哈。这只是一小步,除非它非常复杂,否则我绝对希望能够完成我很快地把这张图片拼凑起来,进一步解释我的小问题,希望它能澄清我的意图:我意识到我在这里运气不好,但我非常感谢这里所有人迄今为止提供的帮助。因为回复页面URL是相同的,并且-页面URL将是相同的,那么唯一的办法就是让Greasemonkey对这两种页面类型都执行操作——这并不难,但会涉及更多。我无法访问启用了“快速回复”的phpBB3论坛,所以请打开一个新的任务