Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在shouldOverrideUrlLoading中未检测到AngularJS应用程序路由更改的Android WebView_Android_Angularjs_Hybrid Mobile App_Webviewclient - Fatal编程技术网

在shouldOverrideUrlLoading中未检测到AngularJS应用程序路由更改的Android WebView

在shouldOverrideUrlLoading中未检测到AngularJS应用程序路由更改的Android WebView,android,angularjs,hybrid-mobile-app,webviewclient,Android,Angularjs,Hybrid Mobile App,Webviewclient,我一直在开发一款混合android应用程序。目前,我们应用程序中的WebView指向AngularJS 1.5.7应用程序。当用户点击应用程序中更改路由的按钮时,我希望在WebViewClient中调用shouldOverrideUrlLoading函数。然而,情况并非如此。看来在安圭拉路线的改变上,应该覆盖的路线并没有受到影响 在这种情况下,我进入了以下兔子洞: onPageFinished-在WebViewClient中重写此函数是可行的,但是,直到新路由被命中后才会调用它。这增加了应用程序

我一直在开发一款混合android应用程序。目前,我们应用程序中的WebView指向AngularJS 1.5.7应用程序。当用户点击应用程序中更改路由的按钮时,我希望在WebViewClient中调用shouldOverrideUrlLoading函数。然而,情况并非如此。看来在安圭拉路线的改变上,应该覆盖的路线并没有受到影响

在这种情况下,我进入了以下兔子洞:

  • onPageFinished-在WebViewClient中重写此函数是可行的,但是,直到新路由被命中后才会调用它。这增加了应用程序的加载时间,并创造了一种不稳定的体验@推翻 公共void onPageFinished(WebView视图,字符串url){

  • shouldInterceptRequest-覆盖此函数允许您监视请求。但是,当请求从AngularJS应用程序发出时,web视图再次显示了一条新的路线,提供了不稳定的用户体验

  • onLoadResource-相同

  • JavaScriptInterface-目前,我已经设置了一个JavaScript界面来监视window.location的更改。这似乎比上述任何选项都能更快地捕捉到路由更改,但是,仍然有一个我不想去的网页的快速闪烁。你可以在这个页面上找到如何进行JavaScript桥接


  • 如果您有任何建议,我们将不胜感激!谢谢。

    您可以使用
    WebViewClient
    中的
    doUpdateVisitedHistory(视图:WebView?、url:String?、isReload:Boolean)
    ,但这与您在第4点中提到的问题相同。不过,您的JS方面不会有任何更改。如何解决这个问题?
            if (url.endsWith("/#/")) {
                signOut();
            } else if (url.endsWith("/login")) {
                // TODO: show some sort of failure message?
                Log.i("Login Route", "The webview just attempted to go to the login route.");
                signOut();
            } else if (url.endsWith("/security")) {
                Intent intent = new Intent(getApplicationContext(), SecurityActivity.class);
                startActivity(intent);
            }
        }`