Javascript 从window.history查找上一个URL
我经常会在浏览交易时遇到这些“未找到页面”的错误 由于我厌倦了复制目标url、取消跳过、在地址栏中替换它并按enter键,因此我编写了一个方便的bookmarklet来自动执行此操作: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
(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
听起来是可行的——只是我现在必须走正路了……)