无法从服务执行 Android WebView 中的 javascript 代码
unable to execute javascript code in Android WebView from Service
我正在尝试创建 Android 服务,该服务使用 JavaScript 执行任务。我遇到了 this post,它描述了如何使用 WindowManager
在服务中的 WebView
中 运行 JavaScript 编码。我可以毫无问题地使用 .html
和 .js
文件创建 WebView
。一旦我尝试将数据从 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>
标签并将文本输出到控制台,没有任何问题。
我也试过在添加视图之前调用这些函数,但无济于事。
如果您尝试从服务执行此操作,则需要在 UI 线程上 post 一个 Runnable。阅读 evaluateJavascript()
的文档
它明确表示必须在 UI 线程上调用它。我想你可以这样做:
wv.post(new Runnable(){
@Override public void run()
{
wv.evaluateJavascript();
}
});
除此之外,您是否应该添加标签?
你想传递什么样的数据给Javascript?您可以在 HTML 文档上使用 WebView.addJavascriptInterface() 到 "Plant" 方法,这样您就可以从 Javascript 调用它们,调用本机和 return 数据返回 Javascript。这会有帮助吗?
我正在尝试创建 Android 服务,该服务使用 JavaScript 执行任务。我遇到了 this post,它描述了如何使用 WindowManager
在服务中的 WebView
中 运行 JavaScript 编码。我可以毫无问题地使用 .html
和 .js
文件创建 WebView
。一旦我尝试将数据从 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>
标签并将文本输出到控制台,没有任何问题。
我也试过在添加视图之前调用这些函数,但无济于事。
如果您尝试从服务执行此操作,则需要在 UI 线程上 post 一个 Runnable。阅读 evaluateJavascript()
的文档它明确表示必须在 UI 线程上调用它。我想你可以这样做:
wv.post(new Runnable(){
@Override public void run()
{
wv.evaluateJavascript();
}
});
除此之外,您是否应该添加标签?
你想传递什么样的数据给Javascript?您可以在 HTML 文档上使用 WebView.addJavascriptInterface() 到 "Plant" 方法,这样您就可以从 Javascript 调用它们,调用本机和 return 数据返回 Javascript。这会有帮助吗?