2017-09-24 113 views
2

我正在使用WebView在Android应用程序上显示网页。 https://developer.android.com/guide/webapps/webview.htmlAndroid webview - JavaScript回调不起作用?

从HTML点击一个按钮后,我能顺利拿到到Android类WebAppInterface(从例子),并显示“吐司”的警报,但在尝试回调到我的网站定义的一个javacsript功能-page不起作用。

这是网页的代码:(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> 

这是Android应用在MainActivity的代码。它加载网址并显示它。

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

谢谢!

回答

1

的解决方案是使用这样的 “后” 功能:

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

mView.evaluateJavascript("ChangeColor();",null);