我正在尝试创建使用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>
标记和输出文本添加到控制台,没有任何问题。
我也尝试在添加视图之前调用这些函数无效。
答案 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();
}
});
除此之外,你应该包括标签吗?