从window.history中查找以前的URL

时间:2013-06-10 18:03:43

标签: javascript google-chrome browser-history

hosts file blocking所以有时间,我通过交易浏览这些“找不到页面”的错误。

由于我厌倦了复制目标网址,无法使用,在地址栏中替换它并点击输入,我写了一个方便的书签来自动执行此操作:

(function () {
    var href = window.location.href;
    var loc = href.indexOf('url=');
    if (loc > 0) {
        var endLoc = href.indexOf('&', loc + 4);
        endLoc = endLoc > 0 ? endLoc : href.length;
        window.location.href = unescape(href.substring(loc + 4, endLoc));
    }
})()

现在问题是Chrome内部将内部重定向和无法访问的页面转移到自己的bounce.php,这会产生以下错误页面。

Screenshot

由于它支持history API,因此浏览器地址栏中的网址不会发生变化,如以下数据所示:

> JSON.stringify(window.history)  
{"state":null,"length":2}

现在的问题是,我的bookmarklet不起作用,因为window.location.href一旦发生这种情况就指向"data:text/html,chromewebdata"

我看过这个问题How do you get the previous url in Javascript?,其接受的答案是幸福的错误。理所当然,document.referrer在我的情况下是空的。

那么有没有办法从window.history找到以前的网址? window.history.previous是非标准的,无论如何都无法在Chrome上运行。

1 个答案:

答案 0 :(得分:0)

找到一种方法(至少在它持续时!)

Chrome会在document.title中设置整个网址,因此只需查询即可。如果有兴趣的话,请修改以下代码:

(function () {
    var href = document.title;
    var loc = href.lastIndexOf('http');
    if (loc > 0) {
        var endLoc = href.indexOf(' is not available', loc);
        endLoc = endLoc > 0 ? endLoc : href.length;
        window.location.href = unescape(unescape(href.substring(loc, endLoc)))
    }
})()

注意:来自Google广告的链接需要加倍unescape