Как мне запустить javascript внутри строки html с помощью webview?

#javascript #android

#javascript #Android

Вопрос:

Как мне запустить код JavaScript в webview ?

Можно ли использовать существующий URL-адрес и поместить JavaScript в этот URL webview -адрес (не onPageFinished), но я не уверен, как это сделать, поэтому я пытаюсь создать короткий HTML-код, который будет запускать JavaScript.

 webView.addJavascriptInterface(this, "Android");

String page = "<html>"  
                "<body>"  
                "<script>"  
                "document.write(javascript:Android.getdate())"  
                "</script>"  
                "</body>"  
                "</html>");
webView.loadUrl(page)
 

Я ожидаю, что при loadUrl запуске с этой строкой html она запустит getdate() функцию и отобразит результат.

Ответ №1:

Сначала вам нужно включить JavaScript для WebView в его настройках.

         WebSettings webSettings = webView.getSettings();
        if (webSettings != null) {
            webSettings.setJavaScriptEnabled(true);
        }
 

Также, если вы хотите загрузить HTML вместо URL, вам нужно использовать loadData() вместо loadUrl() .

 public class MainActivity extends AppCompatActivity {

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

        WebView webView = findViewById(R.id.webView);
        WebSettings webSettings = webView.getSettings();
        if (webSettings != null) {
            webSettings.setJavaScriptEnabled(true);
        }

        //Enable setWebContentsDebuggingEnabled to use Chrome DevTools in debug build
        if (BuildConfig.DEBUG) {            
            WebView.setWebContentsDebuggingEnabled(true);
        }

        webView.addJavascriptInterface(this, "Android");

        String page = "<html>"  
                "<body>"  
                "<h1>Test</h1>"  
                "<script type="text/javascript">"  
                "   document.write(Android.getDate());"  
                "</script>"  
                "</body>"  
                "</html>";

        webView.loadData(page, "text/html", "utf-8");
    }

    @JavascriptInterface
    public String getDate() {
        return "<p>The current date is "   new Date().toString()   "</p>";
    }
}