无法在Service WebView中执行javascript代码

时间:2017-09-12 23:00:40

标签: javascript android android-webview

我正在尝试创建使用JavaScript执行任务的Android服务。我遇到了this post,其中介绍了如何使用WebView在服务中的WindowManager内运行JavaScript代码。我可以使用WebView.html文件创建.js,没有任何问题。一旦我尝试将数据从android .java服务传递到我遇到问题的WebView

我试过这样做:

final WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
...
wv = new WebView(this);
wv.setWebViewClient(new WebViewClient());
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl("file:///android_asset/www/test.html");
windowManager.addView(wv, params); // params set using method from linked post above
wv.evaluateJavascript("console.log('hello');", null);
wv.loadUrl("javascript:console.log('blah')");

evaluateJavascript()loadUrl()的调用似乎对WebView没有任何影响(我使用chrome开发人员工具访问控制台)。

我已经在test.html中对其进行了测试,我可以将<script>标记和输出文本添加到控制台,没有任何问题。

我也尝试在添加视图之前调用这些函数无效。

2 个答案:

答案 0 :(得分:1)

您希望将哪种数据传递给Javascript?你可以使用WebView.addJavascriptInterface()到&#34; Plant&#34; HTML文档上的方法,以便您可以从Javascript调用它们,在本机中调​​用并将数据返回给Javascript。这会有帮助吗?

答案 1 :(得分:0)

如果您尝试从服务执行此操作,则需要在UI线程上发布Runnable。阅读evaluateJavascript()

的文档

它明确表示必须在UI线程上调用它。我想你可以做到:

wv.post(new Runnable(){
        @Override public void run()
        {
            wv.evaluateJavascript();
        }
    });

除此之外,你应该包括标签吗?