2015-06-05 23 views
1

我有一個名爲downloadapp的div,我想顯示給訪問我的移動網站,而不是使用我的Android應用程序的用戶。所以我需要爲已經使用我的應用的用戶隱藏該div。隱藏在Android WebView應用程序與Java的div不起作用

我的代碼:

private void startWebView(String url) { 
webView.getSettings().setJavaScriptEnabled(true); 
webView.setWebViewClient(new WebViewClient() {  

    //On error, open local file 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
    webView.loadUrl("file:///android_asset/www/myerrorpage.html"); 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) {    
     view.loadUrl(url); 
    return true; 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     view.loadUrl("javascript:document.getElementById('downloadapp').style.display = 'none';"); 
    } 

}); 

webView.loadUrl(url); 

} 

問題:

我的應用程序加載DIV第一,其實際顯示爲幾秒鐘。然後,突然,應用程序中加載的整個網頁消失,並且屏幕上留下了一個空白頁,其中包含單詞「none」。

我試圖隱藏div「downloadapp」的方式有什麼問題嗎?或者我在這裏丟失了什麼?

我希望它做的是立即隱藏div顯示網頁之前。

回答

2

WebView的新版本發生這種情況 - 如果您的應用的目標是API級別19或更高(KitKat),那麼如果javascript: URL返回值,則該值將被解釋爲新網頁的內容以打開。就你而言,由於'none'是作業的返回值,因此它將用作新頁面的內容。

只需將void(0);置於javascript:的代碼末尾,以防止它返回值。

+0

謝謝,這是有效的。不過,我仍然遇到了div顯示幾秒的問題(直到頁面被加載)。任何想法我怎麼能立即隱藏它? – Stan

+0

一種可能的方法是在應用的用戶代理字符串中添加一些標識字符串,例如像這樣:'webView.getSettings()。setUserAgentString(webView.getSettings()。getUserAgentString()+'; myapp')',然後在你的頁面代碼中隱藏div:'if(navigator.userAgent.endsWith('myapp '))document.getElementById('downloadapp')。style.display ='none'' –

+0

我在我的應用程序中添加了這個:'webView.getSettings()。setUserAgentString(webView.getSettings()。getUserAgentString()+「; myapp 「);' 而這在我的網頁的標題: '' 但它不起作用。任何想法可能是錯的? – Stan