标签: browser-history

如何禁用骨干历史记录但仍允许基于散列的路由?

说我做以下事情:

  • 单击主页上的链接(/)并转到/ posts/1
  • 触发事件并转到骨干路径/ posts/1 /#/ 1/edit
  • 我点击回来

我需要做到这一点,以便用户返回主页(/)而不是返回/ posts/1

所以我需要允许骨干哈希路由工作,但不能修改历史记录.我个人更喜欢保留历史,但这是项目的要求.

browser-history backbone.js

8
推荐指数
1
解决办法
6543
查看次数

goBack()带我到第一个入口,而不是我想去的地方

我正在创建一个应用程序,我登录/注销有一个家,关于,配置文件等.它使用反应路由器,但是当我登录时,我希望应用程序转换到它所在的最后一条路线,它有时适用于例如,如果我访问,然后登录并登录,它会带我回到约,但如果我访问应用程序根目录'/'然后去登录,并登录,它会带我回到我曾经在的第一页(当您打开浏览器或选项卡时,这将是默认页面).我这样写了,我觉得我这样做的方式非常幼稚.我在渲染方法中做到了,它被称为很多.我认为它有时会这样做,但我不完全确定.希望得到一些建议,代码:

constructor(props, context) {
    super(props, context);
    this.state = UserStore.getState();
    this.context = context;
  }

render() {

    console.log(this.state.user.get('authenticated'));
    if(this.state.user.get('authenticated')){
        this.context.history.goBack();
    }

     return (
    //stuff
    )
Run Code Online (Sandbox Code Playgroud)

我是否应该在我访问的每条路线上将状态推入历史记录中,我还注意到,如果我在登录之前等待一段时间,有时它会正确执行,也许它会将其添加到历史记录中稍晚或需要一些时间?不完全确定如何调试它,console.log(this.context.history)只是显示了它的一些功能,我想我可能会在错误的地方看?

路线:

export default (
  <Route component={App}>
    <Route path="/" component={Dashboard} />
    <Route path="dashboard" component={Dashboard} onEnter={requireAuth} />
    <Route path="about" component={About} />
    <Route path="profile" component={Profile} onEnter={requireAuth}/>
    <Route path="login" component={LoginSignupPage} />
    <Route path="channels" component={Channels} />
  </Route>
);
Run Code Online (Sandbox Code Playgroud)

注入反应路由器

import React from 'react';
import ReactDOM from 'react-dom';
import Iso from 'iso';
import createBrowserHistory from 'history/lib/createBrowserHistory';
import { Router } from 'react-router'; …
Run Code Online (Sandbox Code Playgroud)

browser-history reactjs react-router isomorphic-javascript

8
推荐指数
1
解决办法
611
查看次数

webView.canGoBack()始终为false

我有Android Web View的问题.当我覆盖函数shouldOverrideUrlLoading在我的类中扩展WebViewClient然后WebView.canGoBack()总是返回false.

以下是我的代码

public class SMWebViewClient extends WebViewClient {

   @Override
   public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
      view.loadUrl(request.getUrl().toString());
      return true;
   }

   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String uri) {
      view.loadUrl(uri);
      return true;
   }
}
Run Code Online (Sandbox Code Playgroud)

在我的活动中:

@BindView(R.id.main_webview) SMWebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {

    ...
    webView.setWebViewClient(new SMWebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url){

        }
    });
    webView.clearCache(true);
    webView.clearHistory();
    webView.loadUrl(Constant.baseUrl + Constant.homeUrl);
}
Run Code Online (Sandbox Code Playgroud)

问题是函数webView.canGoBack(总是在我的活动中)总是返回false:

    @Override
    public void onBackPressed() {
       //ALWAYS FALSE
       if …
Run Code Online (Sandbox Code Playgroud)

java android webview browser-history android-webview

8
推荐指数
2
解决办法
2426
查看次数

"重新打开上次关闭的标签",导致显示最后的ajax请求内容

我正在使用HTML 5历史API来保存ajax请求时的状态,如果用户请求同一页面没有ajax请求,我提供完整的html内容.

浏览器的"重新打开最后关闭的选项卡"功能带来了最后的ajax请求内容而无需点击服务器.如果浏览器会在没有带上一个请求内容的情 但浏览器只显示最后的ajax请求内容.

我在Chrome 17,Firefox 10上遇到过这种情况.(我没有在ie9上尝试过,因为它没有支持历史记录api)

什么是这个问题的众所周知的解决方案?

编辑:这些ajax请求只是向服务器"获取"请求.

它真的不可能在jsfiddle.net中展示它,因为几乎没有理由.您可以在本地主机中演示它,如下所示.

向服务器发出"get"请求并拉出json对象,然后将该url推送到历史api中,如下所示.

history.pushState(null,null,url);
Run Code Online (Sandbox Code Playgroud)

然后关闭该选项卡,然后单击浏览器的"重新打开上次关闭的选项卡"功能.你看到了什么 ?Json回应身体?浏览器显示它而不向服务器发出请求,对吧?

javascript ajax html5 browser-history web

7
推荐指数
1
解决办法
1754
查看次数

Chrome历史记录错误可能 - 执行PRG,再次导航到同一表单时 - 不会添加历史记录条目

仅在Chrome中出现奇怪的后退按钮行为.
我有两个页面 - 网格和表单
场景:
1.当从网格导航到表格时一切都很好 - 网格被添加到历史记录中.
2.当表单通过post发送到服务器时,我使用RedirectToAction再次重定向(302)到网格 - 表单被添加到历史记录中.
3.在重定向再次从网格导航到窗体时,包含网格地址的历史记录点不会添加到历史记录中

现在,您必须在后退按钮上单击两次才能返回到网格.

如果您多次重复所有步骤并观看历史堆栈,您将看到一个悲伤的表单条目列表,中间没有网格

编辑:这是指向显示问题的页面的链接,在chrome中打开它并按照说明操作 - 查看操作中的Chrome历史记录错误

我发现的唯一"解决方案"是在表单的链接中添加一些随机的废话,但我真的很讨厌这个.

model-view-controller google-chrome post-redirect-get browser-history

7
推荐指数
1
解决办法
761
查看次数

如何在Android中获取浏览器历史记录?

我想实现一个应用程序来获取Android默认浏览器历史记录并将浏览器历史记录保存到xml文件.但浏览器历史记录不会将某些设备保存到xml文件中.

我已经实现了我的应用程序以获取浏览器历史信息以保存到xml文件,如下所示:

private void browserHistoryDOM() {
    try{
        File newxmlfile = new File("/sdcard/Xmlfiles/briwserHistory.xml");
        newxmlfile.createNewFile();
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document document = documentBuilder.newDocument();
        Element rootElement = document.createElement("root");
        document.appendChild(rootElement);

        Cursor mCur = managedQuery(Browser.BOOKMARKS_URI,Browser.HISTORY_PROJECTION, null, null, null);
        mCur.moveToFirst();

        if (mCur.moveToFirst() && mCur.getCount() > 0) {
            while (mCur.isAfterLast() == false) {
                Element em = document.createElement("bookmarkIdx");
                em.appendChild(document.createTextNode(mCur.getString(Browser.HISTORY_PROJECTION_BOOKMARK_INDEX)));
                rootElement.appendChild(em);

                long callDate = Long.parseLong(mCur.getString(Browser.HISTORY_PROJECTION_DATE_INDEX));
                SimpleDateFormat datePattern = new SimpleDateFormat ("dd-MM-yyyy/h:m:s:a");
                datePattern.setTimeZone(TimeZone.getTimeZone("GMT"));
                String date_str = datePattern.format(new Date(callDate));

                Element em1 = document.createElement("dateIdx");
                em1.appendChild(document.createTextNode(date_str));
                rootElement.appendChild(em1);

                Element em2 …
Run Code Online (Sandbox Code Playgroud)

android browser-history

7
推荐指数
1
解决办法
5507
查看次数

使用JSF ajax请求刷新URL

我使用JSF 2 PrettyFaces,也是<h:link><f:param>标签广泛地获得可收藏的页面(这是伟大的最终忘记在JSF应用程序所有的POST请求).

但是,其中一些链接只会更改页面的一小部分(主要是当用户停留在同一视图中时),因此发送ajax请求会更好.但是,<f:ajax>不能用<h:link>,只是<h:commandlink>.我也可以使用commandlink以多种方式发送参数,但在这种情况下,URL在请求后保持不变.因此它与页面内容不同步,并且不可刷新.

我已经看到使用链接发送GET和ajax请求(在使用ajax修改页面时指向新URL)的网站,但到目前为止我还没有找到任何解决方案.

在ajax请求完成后(或用户点击时),我可以用jsf以某种方式刷新URL吗?或者我是否必须使用一些外部JS库?

编辑:这里需要的JS库是新的JavaScript History API.更多信息. 我猜JSF目前不使用这个API.但是我仍然从JSF开发人员的角度对这个问题感兴趣.

此外,它是否计划在未来发布JSF?结合<f:ajax>使用<h:link>将是一个完美的解决方案.

javascript ajax browser-history jsf-2

7
推荐指数
1
解决办法
1799
查看次数

在Android浏览器中获取当前URL

我正在寻找一种方法来获取用户在Android浏览器应用程序上访问的当前URL.我发现我可以Browser.BOOKMARKS_URI使用以下技术从数据库中获取最后访问过的URL :

Cursor cursor = context.getContentResolver().query(Browser.BOOKMARKS_URI,
        Browser.HISTORY_PROJECTION, null, null,
        Browser.BookmarkColumns.DATE + " DESC");
cursor.moveToNext();
String url = cursor.getString(Browser.HISTORY_PROJECTION_URL_INDEX);
cursor.close();
Run Code Online (Sandbox Code Playgroud)

这样做的问题是,Browser.BOOKMARKS_URI当用户按下以便导航到浏览器中的上一页时,db不会更新,并且查询返回不正确的结果.

请参阅以下示例:

  1. 用户导航到www.google.com - > 查询返回"www.google.com"
  2. 用户导航到www.imdb.com - > 查询返回"www.imdb.com"
  3. 用户按下返回www.google.com - > 查询返回"www.imdb.com"(!!)

有没有人知道如何返回用户正在查看的正确网址?

java url android browser-history android-browser

7
推荐指数
1
解决办法
3648
查看次数

statechange load导致同一页面的多个加载

看来这一行在statechange事件中:

$('#content').load(State.data.home_page);

...导致同一页面加载多次,导致我的网站出现故障.我该怎么做才能解决这个问题?

在此输入图像描述

(function($) {

    function loadHome() {
        $('#content').load(site.url + '/ #primary', function() {
            $(this).fadeIn(50);
        });
    }

    // User event
    $('.site-title a').on('click', function(e) {
        e.preventDefault();

        var newData = { home_page: site.url + '/ #primary' };
        History.pushState(newData, site.title, site.url);
        loadHome();
    });

    // History event
    History.Adapter.bind(window, 'statechange', function(){
        var State = History.getState();
        $('#content').load(State.data.home_page);
    });

})(jQuery);
Run Code Online (Sandbox Code Playgroud)

更新

好的,所以我学到了.pushState实际的电话statechange.

所以基本上,我在想这就是发生的事情:

  • 用户点击 .site-title a
  • pushState()调用哪些调用statechange加载页面的一部分.
  • 同时,loadHome()也称为加载相同的.

我可以看到这就是为什么我得到同一页面的多个实例.我以为statechange只有当用户点击浏览器上的后退按钮时才会调用.这样可以解决问题,但我仍然不知道如何向前推进.假设这是罪魁祸首,我不知道.load在这个statechange事件中用什么代替那条线.

ajax jquery browser-history history.js html5-history

7
推荐指数
1
解决办法
436
查看次数

Gatsby.js:使用URL参数和浏览器后退/前进按钮进行导航

我有一个文章组件,显示帖子列表.该列表是分页的,因此每页最多可显示10个帖子.有一个"下一页"按钮,单击时将更新组件状态和相应的url参数,如下所示:

第1页:/ news

第2页:/ news?page = 2

第3页:/ news?page = 3

...等等.设置constructor()render()方法的方式,如果用户直接导航到/ news?page = 3,它将读取此URL参数并显示正确的帖子.

我遇到的问题是浏览器后退和前进按钮似乎没有重新呈现页面.因此,如果用户点击"下一页"按钮几次然后点击后退按钮,则URL将更新,但页面将不会重新呈现.有没有办法强迫它这样做?

我猜测有一种方法可以通过添加一个window.history监听器来实现这一点,但我不确定是否有推荐的练习gatsby-link.

以下是该组件的精简版本供参考:

import React, { Component } from 'react';
import { navigateTo } from 'gatsby-link';
import getUrlParameter from '../functions/getUrlParameter';

export default class extends Component {
  constructor(props) {
    super(props);

    /* external function, will grab value
    * of ?page= url parameter if it exists */
    const urlParamPage = getUrlParameter('page');
    const currentPage = urlParamPage ? urlParamPage : 1;

    this.state = { …
Run Code Online (Sandbox Code Playgroud)

back-button browser-history reactjs react-router gatsby

7
推荐指数
1
解决办法
6364
查看次数