shouldOverrideUrlLoading未检测到HTML5中的哈希URL变化内景 [英] shouldOverrideUrlLoading is not detecting Hash url change for inside view in html5

查看:116
本文介绍了shouldOverrideUrlLoading未检测到HTML5中的哈希URL变化内景的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的工作网+ Android项目,但事情是,我能不能从shouldOverrideUrlLoading获得URL。 我想,这是因为有嵌套的HTML视图和动态数据分配到HTML容器。 有一个在HTML网页滑动菜单查看其相同的,如Facebook,Gmail的式滑动菜单,但它在HTML中。 当你点击该菜单我不能得到URL的任何项目。(我只想确定哪个按钮或菜单项是自来水用户)。

如果我尝试比它的工作原理简单的A HREF链接我得到shouldOverrideUrlLoading URL。

****我想我的Web开发人员加载一个索引页,并为他把一只div标签,当你从一个页面移动到另一个他只是更改div标签的内容,这就是为什么我不明白网址在shouldOverrideUrlLoading有检索用户点击按钮或项目的任何其他方式****

有没有什么办法来追踪装载嵌套的HTML页面。

下面是嵌套的HTML,CSS,JS的索引页

 <!DOCTYPE HTML>
< HTML LANG =EN>
    < HEAD>
        <元字符集=utf-8>
        < META NAME =视CONTENT =初始规模= 1.0,用户可扩展性=无>
        < META NAME =苹果移动网络应用能力的内容=是>
        < META NAME =msapplication抽头高亮CONTENT =NO>
        <冠军>应用< /标题>
        <! - 
        < PHP
            //使用,使用的应用程序,以服务于正确的css文件到操作系统
            $剂= $ _ SERVER ['HTTP_USER_AGENT'];
        ?>
         - >

        <链接相对=样式表的href =CSS / all.css>
        <脚本数据主要=JS /所有的SRC =JS /库/要求/ require.min.js>< / SCRIPT>
    < /头>

    <身体GT;
        < D​​IV ID =页面>< / DIV>

    < /身体GT;

< / HTML>
 

这是滑动菜单

 < UL类=左导航列表>
    &所述;丽类=niv1>&其中; H3>&所述; A HREF => ACCUEIL&所述; / a取代;&所述; / H3>&所述; /利>
    <李类=niv1>< H3>您的评分孔特< / H3>< /李>
    <李类=niv1>< H3>< A HREF =#添加视频>投标人UNEvid√©O< / A>< / H3>< /李>
    <李类=niv1>< H3>Vid√©OS< / H3>
        < UL>
            <李类=niv2>< H4>< A HREF =#视频列表> Populaires< / A>< / H4>< /李>
            <李类=niv2>< H4>< A HREF =#视频列表> +comment√©ES< / A>< / H4>< /李>
            <李类=niv2>< H4>< A HREF =#视频列表>Derni√®resvid√©OS< / A>< / H4>< /李>
        < / UL>
    < /李>
    <李类=niv1> < H3>竞赛< / H3>
        < UL>
            <李类=niv2>< H4>< A HREF =#大赛名单>全部< / A>< / H4>< /李>
            <李类=niv2>< H4>< A HREF =#大赛开>恩赛道< / A>< / H4>< /李>
            &所述;丽类=niv2>&其中; H4>&所述; A HREF =#竞赛封闭>Termin√©&所述; / a取代;&所述; / H4>&所述; /利>
        < / UL>
    < /李>
< / UL>
< UL级=右导航列表>
    <李类=niv1 clearfix>< H3> Secteurs< / H3>
        < UL>
            {{#secteurs}}
            &所述;丽类=niv2>&其中; H4>&所述; A HREF =#扇区{{secteur_id}}> {{nom_secteur}}&所述; / a取代;&所述; / H4>&所述; /利>
            {{/ secteurs}}
        < / UL>
    < /李>
< / UL>
 

Android的code

  @覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);

    myWebView =(web视图)findViewById(R.id.webview1);
    myWebView.setWebChromeClient(新WebChromeClient());
    HelloWebViewClient webViewClient =新HelloWebViewClient();
    myWebView.setWebViewClient(webViewClient);
    。myWebView.getSettings()setAllowUniversalAccessFromFileURLs(真正的);

    WebSettings webSettings = myWebView.getSettings();

    webSettings.setJavaScriptEnabled(真正的);
    webSettings.setDomStorageEnabled(真正的);

    myWebView.loadUrl(文件:///android_asset/index.html);

}

@覆盖
公共布尔onCreateOptionsMenu(功能菜单){
    //充气菜单;这增加了项目操作栏,如果它是present。
    。getMenuInflater()膨胀(R.menu.main,菜单);
    返回true;
}

私有类HelloWebViewClient扩展WebViewClient {
    @覆盖
    公共布尔shouldOverrideUrlLoading(web视图查看,字符串URL){
        Log.i(shouldOverrideUrlLoading,网址);
        返回true;
    }
}
 

解决方案

将这个code加载的URL,然后

  webView.setWebViewClient(新的回调());
    webView.setWebChromeClient(新webChromeClient());
    webView.getSettings()setJavaScriptEnabled(真)。
    webView.getSettings()setDatabaseEnabled(真)。
    webView.getSettings()setDomStorageEnabled(真)。
    。webView.getSettings()setSavePassword(真正的);
    。webView.getSettings()setAllowFileAccess(真正的);
    。webView.getSettings()setJavaScriptCanOpenWindowsAutomatically(真正的);
    。webView.getSettings()setSupportMultipleWindows(真正的);
    webView.getSettings()setAppCacheMaxSize(1024 * 1024 * 16)。
    字符串appCachePath = getApplicationContext()getCacheDir()getAbsolutePath()。
    webView.getSettings()setAppCachePath(appCachePath)。
    webView.getSettings()setAppCacheEnabled(真)。
    webView.getSettings()setRenderPriority(RenderPriority.HIGH)。
    。webView.getSettings()setCacheMode(WebSettings.LOAD_NO_CACHE);
    。字符串databasePath =/数据/数据​​/+ getApplicationContext()getPackageName()+/数据库/;


    webView.getSettings()setDatabasePath(databasePath)。
    //webView.getSettings().setGeolocationEnabled(true);
    。webView.getSettings()setSaveFor​​mData(真正的);
    webView.getSettings()setPluginsEnabled(真)。
    。webView.getSettings()setLoadWithOverviewMode(真正的);
    JavascriptInterface javasriptInterface =新JavascriptInterface(MainActivity.this);
    webView.addJavascriptInterface(javasriptInterface,打印);


私有类回调扩展WebViewClient {
    @覆盖
    公共布尔shouldOverrideUrlLoading(web视图查看,字符串URL){
        AppLog.logString(TAG +shouldOverrideUrlLoading);
        AppLog.logString(TAG +URL:+网址);

        view.loadUrl(URL);
        }
        返回true;
        //返回(假);
    }
    @覆盖
    公共无效onPageStarted(web视图查看,字符串URL,位图图标){
        // TODO自动生成方法存根
        AppLog.logString(TAG +onPageStarted);
        AppLog.logString(TAG +URL:+网址);

        super.onPageStarted(查看,网址,网站图标);
    }

    @覆盖
    公共无效onPageFinished(web视图查看,字符串URL){
        // TODO自动生成方法存根
        AppLog.logString(TAG +onPageFinished);
        AppLog.logString(TAG +URL:+网址);

        super.onPageFinished(查看,网址);
    }
 }
 私有类webChromeClient扩展WebChromeClient {
     @覆盖
        公共无效onExceededDatabaseQuota(URL字符串,字符串databaseIdentifier,长currentQuota,长estimatedSize,长tot​​alUsedQuota,WebStorage.QuotaUpdater quotaUpdater){
         AppLog.logString(TAG +onExceededDatabaseQuota);
         quotaUpdater.updateQuota(5 * 1024 * 1024);
     }
     @覆盖
     公共无效onProgressChanged(web视图查看,诠释newProgress){
        MainActivity.this.setProgress(newProgress * 1000);
     }
 }

Applog.logString什么它log.d因此改变它,这是为我工作得非常好
 

I am working on web + android project but thing is that i can not able to get url from shouldOverrideUrlLoading. I think this is because there is nested html view and dynamic data assigning into html container. There is sliding menu in html web view its same like facebook , gmail type sliding menu but its in html. when you tap any item of that menu i cant get url ..( i want to just determine which button or menu item is tap by user).

if i try simple a href link than it works i get shouldOverrideUrlLoading url.

****I think my web developer loading one index page and into that he put one div tag and he just change the content of div tag when you move from one page to another and thats why i don't get url in shouldOverrideUrlLoading is there any other way to retrieve user click on button or item****

IS there any way to track loading of nested html pages.

Here is Index page of nested html , css , js

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="msapplication-tap-highlight" content="no">
        <title>Application</title>
        <!--
        <?php
            // Use that to serve the correct css file to the os using the app
            $agent = $_SERVER['HTTP_USER_AGENT'];
        ?>
        -->

        <link rel="stylesheet" href="css/all.css">
        <script data-main="js/all" src="js/libs/require/require.min.js"></script>
    </head>

    <body>
        <div id="page"></div>

    </body>

</html>

This is sliding menu

<ul class="left-navigation list">
    <li class="niv1"><h3><a href="">Accueil</a></h3></li>
    <li class="niv1"><h3>Votre compte</h3></li>
    <li class="niv1"><h3><a href="#add-video">Proposer une vidéo</a></h3></li>
    <li class="niv1"><h3>Vidéos</h3>
        <ul>
            <li class="niv2"><h4><a href="#video-list">Populaires</a></h4></li>
            <li class="niv2"><h4><a href="#video-list">+ commentées</a></h4></li>
            <li class="niv2"><h4><a href="#video-list">Dernières vidéos</a></h4></li>
        </ul>
    </li>
    <li class="niv1"> <h3>Concours</h3>
        <ul>
            <li class="niv2"><h4><a href="#contest-list">Tous</a></h4></li>
            <li class="niv2"><h4><a href="#contest-opened">En cours</a></h4></li>
            <li class="niv2"><h4><a href="#contest-closed">Terminé</a></h4></li>
        </ul>
    </li>
</ul>
<ul class="right-navigation list">
    <li class="niv1 clearfix"><h3>Secteurs</h3>
        <ul>
            {{#secteurs}}
            <li class="niv2"><h4><a href="#sector{{secteur_id}}">{{nom_secteur}}</a></h4></li>
            {{/secteurs}}
        </ul>
    </li>
</ul>

Android code

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    myWebView = (WebView) findViewById(R.id.webview1);
    myWebView.setWebChromeClient(new WebChromeClient());
    HelloWebViewClient webViewClient = new HelloWebViewClient(); 
    myWebView.setWebViewClient( webViewClient);
    myWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);

    WebSettings webSettings = myWebView.getSettings();

    webSettings.setJavaScriptEnabled(true);
    webSettings.setDomStorageEnabled(true);

    myWebView.loadUrl("file:///android_asset/index.html");

}    

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

private class HelloWebViewClient extends WebViewClient{ 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        Log.i("shouldOverrideUrlLoading", url);
        return true;
    }
}

解决方案

Put this code before load url

    webView.setWebViewClient(new Callback());
    webView.setWebChromeClient(new webChromeClient());
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDatabaseEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setSavePassword(true);
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webView.getSettings().setSupportMultipleWindows(true);
    webView.getSettings().setAppCacheMaxSize(1024*1024*16);
    String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
    webView.getSettings().setAppCachePath(appCachePath);
    webView.getSettings().setAppCacheEnabled(true);
    webView.getSettings().setRenderPriority(RenderPriority.HIGH);
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    String databasePath = "/data/data/" + getApplicationContext().getPackageName() + "/databases/";


    webView.getSettings().setDatabasePath(databasePath);
    //webView.getSettings().setGeolocationEnabled(true);
    webView.getSettings().setSaveFormData(true);
    webView.getSettings().setPluginsEnabled(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    JavascriptInterface javasriptInterface = new JavascriptInterface(MainActivity.this);
    webView.addJavascriptInterface(javasriptInterface, "Print");


private class Callback extends WebViewClient{  
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        AppLog.logString(TAG+"shouldOverrideUrlLoading");
        AppLog.logString(TAG+"url: "+url);

        view.loadUrl(url);
        }
        return true;
        //return (false);
    }
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        AppLog.logString(TAG+"onPageStarted");
        AppLog.logString(TAG+"url: "+url);

        super.onPageStarted(view, url, favicon);
    }   

    @Override
    public void onPageFinished(WebView view, String url) {
        // TODO Auto-generated method stub
        AppLog.logString(TAG+"onPageFinished");
        AppLog.logString(TAG+"url: "+url);

        super.onPageFinished(view, url);
    }   
 }
 private class webChromeClient extends WebChromeClient{
     @Override
        public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) { 
         AppLog.logString(TAG+"onExceededDatabaseQuota");
         quotaUpdater.updateQuota(5 * 1024 * 1024); 
     }      
     @Override
     public void onProgressChanged(WebView view, int newProgress) {
        MainActivity.this.setProgress(newProgress * 1000);
     }
 }

Applog.logString is nothing it's log.d so change it this is working for me very well

这篇关于shouldOverrideUrlLoading未检测到HTML5中的哈希URL变化内景的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆