Javascript 从window.history查找上一个URL

Javascript 从window.history查找上一个URL,javascript,google-chrome,browser-history,Javascript,Google Chrome,Browser History,我经常会在浏览交易时遇到这些“未找到页面”的错误 由于我厌倦了复制目标url、取消跳过、在地址栏中替换它并按enter键,因此我编写了一个方便的bookmarklet来自动执行此操作: (function () { var href = window.location.href; var loc = href.indexOf('url='); if (loc > 0) { var endLoc = href.indexOf('&', loc

我经常会在浏览交易时遇到这些“未找到页面”的错误

由于我厌倦了复制目标url、取消跳过、在地址栏中替换它并按enter键,因此我编写了一个方便的bookmarklet来自动执行此操作:

(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
,从而生成以下错误页面

由于它支持API,浏览器地址栏中的URL不会更改,从以下数据可以看出:

> JSON.stringify(window.history)  
{"state":null,"length":2}
现在的问题是,我的bookmarklet无法工作,因为一旦发生这种情况,window.location.href指向
“data:text/html,chromewbdata”

我已经看过这个问题,它的公认答案是非常不正确的。在我的例子中,
document.referer
是空的

那么,有没有一种方法可以从
窗口中找到以前的URL.history
<代码>窗口。历史记录。以前的是非标准的,无论如何在Chrome上都不起作用。

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

Chrome在
document.title
中设置整个URL,因此只需查询即可。如果有人感兴趣,下面是修改后的代码:

(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)))
    }
})()

注意:双
unescape
是通过谷歌广告提供链接所必需的。

您是否考虑过创建一个Chrome扩展而不是使用bookmarklet?我们的想法是一样的,尽管不确定我是否可以通过它进行访问……API可以用来检测网络错误。对于您的特定用例,只需监视
主框架上的错误
。下面是一个例子:。在尝试创建Chrome扩展之前,您是否已经查看了错误页面的生成源?您确定在其中找不到原始URL吗?是的!我已经看过了。此外,不能依赖查看源,因为这可能不适用于任何和每个站点
chrome.webRequest
听起来是可行的——只是我现在必须走正路了……)