无法从服务执行 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。这会有帮助吗?