2017-09-24 23 views
2

私はアンドロイドアプリケーションでWebページを表示するためにWebViewを使用しています。 https://developer.android.com/guide/webapps/webview.htmlAndroid webview - JavaScriptコールバックが機能していませんか?

HTMLから]ボタンをクリックした後、私は正常にAndroidのクラスに取得することができWebAppInterface(例から)と「トースト」のアラートを表示するが、私のウェブに定義されてjavacsript関数にコールバックしようとしていますページが機能しません。これは、AndroidアプリのMainActivityのコードである(Android.html)

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /> 

<script type="text/javascript"> 
    function showAndroidToast(toast) { 
     if (typeof Android != 'undefined') 
      Android.showToast(toast);  


    } 

    function ChangeColor() 
    { 
     document.body.style.background = 'pink'; 
    } 
</script> 

これは、Webページのコードです。 URLを読み込んで表示します。

public class MainActivity extends AppCompatActivity { 

    WebView m_Webview; 

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

     m_Webview = (WebView) findViewById(R.id.webview); 

     WebSettings webSettings = m_Webview.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setDomStorageEnabled(true); 
     m_Webview.setWebViewClient(new WebViewClient()); 
     m_Webview.loadUrl("android.html"); 


     WebView webView = (WebView) findViewById(R.id.webview); 
     webView.addJavascriptInterface(new WebAppInterface(this,webView), "Android"); 
    } 
} 

これは、AndroidアプリのWebAppInterfaceです:

public class WebAppInterface { 

    Context mContext; 
    WebView mView; 

    /** Instantiate the interface and set the context */ 
    WebAppInterface(Context c,WebView w) { 
     mContext = c; 
     mView = w; 
    } 

    /** Show a toast from the web page */ 
    @JavascriptInterface 
    public void showToast(String toast) { 
     Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); 
     mView.loadUrl("javascript:ChangeColor()"); 
    } 
} 

JavaScript関数トーストが表示取得された後ChangeColorが呼び出さ取得されていません。 https://stackoverflow.com/a/14145116/7751339

ありがとう:複数の基準を参照してください

!キットカットにも

public void showToast(String toast) { 
     Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); 
     // WebView Web = new WebView(mContext); 
     // mView.getSettings().setUserAgentString("Android WebView"); 
     mView.post(new Runnable() { 
      public void run() { 
       mView.loadUrl("javascript:ChangeColor()"); 
      } 
     }); 
    } 

、あなたがevaluateJavascriptを使用する必要が転送:

答えて

1

ソリューションは、このような "ポスト" 機能を使用していた

mView.evaluateJavascript("ChangeColor();",null); 
関連する問題