2012-01-03 24 views
9

私は、HTML、CSS、Javascriptコードを含むWebViewというアクティビティを持っています。WebViewアクティビティでJavascriptが動作しない

ビューの画面サイズJavascriptをアクセスに問題があるようです。 LogCatは言う:私はJS-ファイルに見ると

(Tag: Web Console): Uncaught TypeError: Cannot call method 'getWidth' of undefined 
at file:///android_asset/Prospekte/grund/html5-player/js/epaper-mobile.js:20 

は、そこにある:ありvar f=this.body.getWidth();

好奇心旺盛なことは、は時々コードがを動作することです。その証拠はよく示されている。しかし、ほとんどの時間はこのエラーです。

setContentView(R.layout.prospekt_layout); 
    final Activity activity = this; 

    mWebView = (WebView) findViewById(R.id.prospekt_webview); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.getSettings().setDomStorageEnabled(true); 
    mWebView.setWebChromeClient(new WebChromeClient() { 
    public void onProgressChanged(WebView view, int progress) { 
     activity.setProgress(progress * 1000); 
     } 
    }); 

    mWebView.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) 
     { 
      // Handle the error 
     } 

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

    mWebView.loadUrl("file:///android_asset/Prospekte/modKachel/mobile.html");  

レイアウトは次のとおりです。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    > 
<WebView 
    android:id="@+id/prospekt_webview" 
    android:layout_width="900px" 
    android:layout_height="900px" 
/> 
</LinearLayout> 

私は、これはそれが無いのいずれかのDPで作業していますsolution..butことができると考えた原因私はWebViewののサイズを変更しました。

誰かが考えていますか?あなたのWebViewのためにも、この設定を設定し

答えて

16

:詳細については

WebSettings settings = webView.getSettings(); 
settings.setDomStorageEnabled(true); 

は、次のリンクに答えるために参照してください。 ERROR/Web Console: Uncaught TypeError: Cannot call method 'getItem' of null at http://m.youtube.com/:844

更新: またはこれが役立つかもしれない追加:

webView.loadDataWithBaseURL("fake://fake.com", myString, "text/html", "UTF-8", null); 
+0

ありがとうございますが、私はすでに試してみました。私はこのコードでこれを削除したのは間違いです。だから私はこれを初めてテストしたときには、2度目にはテストしませんでした。時間に問題がある可能性はありますか?たぶん、DOMは十分に速く構築できないでしょうか?私はAsyncTaskを試しましたが、それは助けにもなりませんでした。 – 10ff

+0

よく、時間などの問題のようなことは言えません。 –

+1

アップデートをご覧ください。 –

1

アンドロイド3.2で同じ問題が発生しました。私の作品溶液(かなり醜い)は睡眠を入れて、別のloadUrlを呼び出し、300msの場合はより多くの時間を試してみることです十分ではありません。

myWebView.loadUrl("file:///android_asset/gabarit.html"); 
try { 
    Thread.sleep(300); 
} catch (InterruptedException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
myWebView.loadUrl("file:///android_asset/gabarit.html"); 
1

私は私のMoダブラウザプロジェクトと同じ問題を抱えていました。 VARに保存されているだけでwebview.getSettings()である

wvOptions.setBuiltInZoomControls(true); 
    wvOptions.setUseWideViewPort(true); 

wvOptions:私はこの2行を追加しました。 2行目は問題を解決したようです。 最初の行は、結果のWebページのサイズをユーザーが制御できるようにします。 結果が気に入ったら、「概要で開く」オプションを追加できます。 それは私を助けなかったので、私はズームオプションを使用しました。

+0

'+ 1' OMGこれらの2つの行が私の一日を作りました。私の** HTML **と** CSS **は正しくレンダリングされましたが、** JS **は永遠にロードされていました。 'wvOptions.setBuiltInZoomControls(true);と' wvOptions.setUseWideViewPort(true); 'という2つの行を追加しています。ありがとうございました – fWd82

4

WebViewでJavascriptの実行を暗黙的に有効にする必要があります。これは、XSSやその他の脆弱性を引き起こす可能性があるためです。

web = new WebView(this); 
web.getSettings().setJavaScriptEnabled(true); 

はまた、私は私は私のサイトの使用を制限できるように

WebViewClient webViewMainWebClient = new WebViewClient() 
{ 
    // Override page so it's load on my view only 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
    { 
     // Return true to override url loading (In this case do nothing). 
     return false; 
    } 
} 
web.setWebViewClient(this.webViewMainWebClient); 

を経由して、私のWebViewClientを設定することを好みます。

関連する問題