【问题标题】:Webview and loadurl call in another class另一个类中的 Webview 和 loadurl 调用
【发布时间】:2015-03-17 22:31:03
【问题描述】:

我在从 javascriptInterface 调用 webView.loadUrl 时遇到了一些问题:

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.content.Intent;

public class MainActivity extends Activity {

    private WebView webView;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = (WebView) findViewById(R.id.webView);

        webView.setWebViewClient(new WebViewClient());
        JavaScriptInterface jsInterface = new JavaScriptInterface(this);

        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.addJavascriptInterface(jsInterface, "JSInterface");

        webView.setWebChromeClient(new WebChromeClient());


        webView.loadUrl("http://*****.com/test.php");

    }

    public class JavaScriptInterface {
        private Activity activity;

        public JavaScriptInterface(Activity activiy) {
            this.activity = activiy;
        }

        @JavascriptInterface
        public void changeTest(){
            webView.loadUrl("http://google.it");
        }
    }

}

第一个loadUrl(),onCreate中的那个成功,但是JavascriptsInterface中调用的另一个失败。但是,当我通过 Javascript 从页面调用它时,changeTest() 肯定会运行,因为我曾经通过意图调用应用程序并且它加载得很好。所以问题必须与从onCreate外部放置的loadUrl有关。 有人可以解释什么是错的,怎么来的?

【问题讨论】:

    标签: java javascript android webview


    【解决方案1】:

    实际上,您只需稍作修改即可为我工作。请确保在 UI 线程中运行代码。

            @JavascriptInterface
            public void changeTest(){
    
                Log.d("TEST", "THIS IS THE BIGGEST TEST EVER");
    
                activity.runOnUiThread(new Runnable() {
    
                    @Override
                    public void run() {
                        myWebView.loadUrl("http://google.it");
                    }
                });
            }
    

    这是我的html页面中编写的Javascript函数的摘录:

    function doChangeTest(){
            //JSInterface is the supplied name of the interface
            // in Android code: webView.addJavascriptInterface(jsInterface, "JSInterface");
            JSInterface.changeTest();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多