更新:-正如Akansh Gulati他的回答中指出的,如果用户在单击后退按钮之前与页面进行任何交互,这将按预期工作,如果用户没有与页面进行任何交互并按后退按钮,则历史记录中的任何条目(通过哈希-change 或通过history.push/replace)将被忽略,这是Google Chrome更新的一部分,将阻止网站劫持您的浏览器后退按钮
这是有效且合乎逻辑的答案,所以我接受他的答案
我试图在页面加载后显示成功的弹出窗口,如果用户按 android 后退按钮(在本例中相当于浏览器后退按钮),我只想关闭弹出窗口(不想重定向回付款页面)
当弹出窗口打开时,我在 url 中添加哈希,但当用户按下后退按钮时,chrome 会忽略哈希并重定向回上一页,而不是仅删除哈希(在 Firefox 中工作正常)
我这里有一个工作示例,使用以下 HTML 代码来重现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body onload="test()">
<button type="button" onclick="window.history.back();">Back</button>
</body>
<script type="text/javascript">
function writeLength() {
document.body.appendChild(document.createTextNode(window.history.length));
}
function test() {
window.location.hash = 'a';
setTimeout(function() {
writeLength();
window.location.hash = 'b';
setTimeout(function() {
writeLength();
window.location.hash = 'c';
setTimeout(function() {
writeLength();
}, 1500);
}, 1500);
}, 1500);
}
</script>
</html>Run Code Online (Sandbox Code Playgroud)
a) 在 chrome 中打开此页面
b) 等待哈希值更改为“#c” …
因此,我有一个场景,我正在使用函数生成所有 URL history.pushState。我没有为此使用任何服务器端技术。我只从服务器获取所有数据一次,然后使用Javascript.
现在我遇到的问题是使用popstate基本上模仿浏览器后退按钮行为的功能。
只需单击一次后退按钮即可一切正常。
$(window).on('popstate', function (event) {
location.reload(true);
//window.location.href = document.location;
//console.log("location: " + document.location);
});
Run Code Online (Sandbox Code Playgroud)
在一次后退按钮事件之后,我无法看到浏览器以前的任何历史记录。我假设这是因为location.reload方法而发生的。我也尝试存储我的所有位置,然后进行重定向,但同样的事情,浏览器历史记录在一次刷新后就会丢失。
有没有一种方法可以实现此目的,而浏览器不会丢失多次后退按钮单击的历史记录?
如果有一个JQuery选择,那么如果有人可以分享他们在这方面的知识,那就太好了。
我的网站上有一个链接,上面写着"全屏谷歌地图".点击它后,我将谷歌地图加载到100%宽和100%高位固定div容器中.单击链接时,我还将#map添加为哈希.
是否可以使浏览器后退按钮与之一起工作?也就是说,如果我点击此链接,我会将#map添加到我当前的地址.单击后退按钮后,将删除#map哈希,并div删除或隐藏包含谷歌地图的容器.
这有可能吗?
编辑:
$('.showMapLink').live('click', function() {
$('#mapContainer').fadeIn('fast', function () {
loadMap("mapContainer");
top.location.hash = "map";
$(window).bind( 'hashchange', function( event ) {
$('#mapContainer').fadeOut('fast', function () {
$(this).children().remove();
})
});
});
});
Run Code Online (Sandbox Code Playgroud) 我试图从Android浏览器获取历史记录和搜索结果.在下面的代码中,我得到了所有书签,效果很好:
public void getBrowser(){
String[] requestedColumns = {
Browser.BookmarkColumns.TITLE,
Browser.BookmarkColumns.VISITS,
Browser.BookmarkColumns.BOOKMARK
};
Cursor faves = managedQuery(Browser.BOOKMARKS_URI, requestedColumns,
Browser.BookmarkColumns.BOOKMARK + "=1", null, Browser.BookmarkColumns.VISITS);
Log.d(DEBUG_TAG, "Bookmarks count: " + faves.getCount());
int titleIdx = faves.getColumnIndex(Browser.BookmarkColumns.TITLE);
int visitsIdx = faves.getColumnIndex(Browser.BookmarkColumns.VISITS);
int bmIdx = faves.getColumnIndex(Browser.BookmarkColumns.BOOKMARK);
faves.moveToFirst();
while (!faves.isAfterLast()) {
Log.d("SimpleBookmarks", faves.getString(titleIdx) + " visited " + faves.getInt(visitsIdx) + " times : " + (faves.getInt(bmIdx) != 0 ? "true" : "false"));
faves.moveToNext();
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试仅从浏览器获取历史记录时,我正在尝试以下代码:
public void getBrowserHist() {
Cursor mCur = managedQuery(Browser.BOOKMARKS_URI, Browser.HISTORY_PROJECTION, null, null, …Run Code Online (Sandbox Code Playgroud) 因此,我使用HTML5历史记录管理来添加在具有AJAX加载的子内容的网站中前后导航的功能.
现在我想在状态对象中存储javascript函数,以便在弹出状态下进行回调.或多或少像以下代码:
$(window).bind("popstate", function(event) {
var state = event.originalEvent.state;
if (!state) {
return;
}
state.callback(state.argument);
}
function beforeLoad() {
var resourceId = "xyz";
var func;
if (case1) {
func = switchPageToMode1;
} else { // case 2
func = swithPageToMode2;
}
func(resourceId); // run the function
window.history.pushState({ callback: func, resourceId: resourceId }, "newTitle", "newURL"); // and push it to history
}
function switchPageToMode1(resourceId) {
alterPageLayoutSomeWay();
loadResource(resourceId);
}
function swithPageToMode2(resourceId) {
alterPageLayoutSomeOtherWay();
loadResource(resourceId);
}
function loadResource(resourceId) {
...
}
Run Code Online (Sandbox Code Playgroud)
行.所以我要做的是存储对javascript函数的引用.但是当推送状态(实际的window.history.pushState调用)时,浏览器会提出投诉,即错误:"DATA_CLONE_ERR:DOM …
我正在使用addon构建器处理firefox插件.我想定期扫描浏览器的历史记录......整个历史记录.我正在寻找像chrome的历史api这样的功能.似乎window.history仅限于会话历史记录.有帮助吗?我疯了,试图解决这个问题.像历史导出这样的插件必须做这样的事情,但是他们的代码对我来说并不是立即可以理解的.
我有这个方法但它只适用于一个活动
public Cursor getXX() {
Cursor mCur = thius.managedQuery(Browser.BOOKMARKS_URI,Browser.HISTORY_PROJECTION,
null, null, null);
}
public void getBrowserHist() {
Cursor mCur = managedQuery(Browser.BOOKMARKS_URI, Browser.HISTORY_PROJECTION,
null, null, null);
mCur.moveToFirst();
if (mCur.moveToFirst() && mCur.getCount() > 0) {
while (mCur.isAfterLast() == false) {
Log.v("titleIdx", mCur.getString(Browser.HISTORY_PROJECTION_TITLE_INDEX));
Log.v("urlIdx", mCur.getString(Browser.HISTORY_PROJECTION_URL_INDEX));
mCur.moveToNext();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何在android服务中使用"ManagedQuery"字样?
如何创建一个方法将光标返回到浏览器历史记录android系统?
我们可以通过java脚本代码启用或禁用浏览器历史记录吗??如果可能,请告诉我执行此操作的机制。
我尝试在我的wp8 cordova应用程序中实现后退按钮功能,按下设备上的硬件后退按钮应导航到应用程序的上一页.
我做了什么
function onLoad() {
document.addEventListener("deviceready", init, false);
document.addEventListener("resume", onResume, false);
document.addEventListener("backbutton", onBackKeyDown, false);
}
function init() {
//some code
}
function onResume() {
//some code
}
function onBackKeyDown() {
window.history.back();
return false;
}
Run Code Online (Sandbox Code Playgroud)
我也试过替换"window.history.back();" "navigator.app.backHistory();" 这似乎也不起作用
然后我尝试将代码放在try catch块中
try
{
navigator.app.backHistory();
//window.history.back();
}
catch (e)
{
console.log("exception: " + e.message);
}
Run Code Online (Sandbox Code Playgroud)
这似乎也失败.无论我做什么,应用程序似乎退出应用程序而不是向后移动有趣的是当我在IE控制台中尝试这个似乎完美的工作
请帮助这些家伙
提前致谢
问题:
从相同的基本 URL 检索 HTML 和 JSON 时,离开使用 pushState 和 popState 处理后退和前进导航的页面后,使用后退按钮返回页面将显示缓存的 JSON 而不是 HTML。
说明:
window.history.pushState(state,null,url)都调用了 a 。资源被解释为 Document 但使用 MIME 类型 application/json 传输
Firefox 和 Safari 正确重新加载页面,并且由于我正在更新 pushState 调用中的 URL,它们正确地将页面重新加载到我希望的状态(即 url 具有正确的页面标识,因此重新加载了搜索结果的正确页面) .
browser-history ×10
javascript ×6
android ×2
jquery ×2
cordova ×1
cursor ×1
html5 ×1
redirect ×1
uri ×1