【问题标题】:How to detect a redirect with javascript in MediaWiki如何在 MediaWiki 中使用 javascript 检测重定向
【发布时间】:2020-09-30 17:15:22
【问题描述】:

我想检测 MediaWiki 中的 URL 是否指向重定向。当我在 en.wikipedia.org 上运行以下脚本时:

let test = await fetch('https://en.wikipedia.org/wiki/Bruce_Wayne');
console.log(test.url);        // → https://en.wikipedia.org/wiki/Bruce_Wayne
console.log(test.redirected); // → false

然而,当我在地址栏中输入 https://en.wikipedia.org/wiki/Bruce_Wayne 时,我会被重定向到 https://en.wikipedia.org/wiki/Batman#Bruce_Wayne

如果 URL 被重定向到不同的文档,我如何使用 JavaScript 检测?我可以在不获取整个文档的情况下找出答案吗?

【问题讨论】:

    标签: javascript mediawiki fetch-api


    【解决方案1】:

    您可以尝试向 wiki API 发出单独的请求,例如:https://en.wikipedia.org/w/api.php?action=query&titles=Wikipedia:!--&redirects&format=json&formatversion=2。 结果将是:

    {
        "batchcomplete": true,
        "query": {
            "redirects": [
                {
                    "from": "Wikipedia:!--",
                    "to": "Wikipedia:Manual of Style",
                    "tofragment": "Invisible comments"
                }
            ],
            "pages": [
                {
                    "pageid": 33697,
                    "ns": 4,
                    "title": "Wikipedia:Manual of Style"
                }
            ]
        }
    }
    

    注意query.redirects 部分。 示例取自https://www.mediawiki.org/wiki/API:Query#Resolving_redirects

    【讨论】:

      【解决方案2】:

      请参阅Response.redirectedResponse.url 的有关检测重定向的文档。

      您可以发出 HEAD 请求以避免获取整个文档。不过,它会触发跨域请求的 CORS 行为。您还可以使用 Wikipedia 的 API 来查看页面是否是重定向,而不是获取页面,但它可能会更慢并且服务器负载更多 - Wikipedia 针对正常的页面浏览进行了高度优化。

      【讨论】:

      • 我应该提到我不必处理跨域限制
      • 根据Response.redirected没有重定向
      • 好吧,你的例子中没有。 https://en.wikipedia.org/wiki/Bruce_Wayne 返回与 https://en.wikipedia.org/wiki/Batman 相同的 HTML,而不会将您重定向到任何地方。加载页面时,一段 Javascript 会更改显示的 URL 并滚动到该部分。如果您想检测文章重定向(不是 HTTP 重定向),您必须使用 Alexander 所说的 API。
      • 我对 mediawiki 在这一点上如何处理重定向感到非常失望
      • 它可以提高页面性能并减少服务器负载。与此相比,脚本编写并不重要或优先级。根据您所追求的,您可以尝试https://en.wikipedia.org/api/rest_v1/page/html/Bruce_Wayne,这将是一个正确的重定向。 (虽然内容不太一样。)
      猜你喜欢
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 2014-09-21
      相关资源
      最近更新 更多