首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >未捕获SyntaxError:输入意外结束- JavaScript注入到WebView (loadUrl)中的代码在Android7中不起作用,但在Android4中起作用

未捕获SyntaxError:输入意外结束- JavaScript注入到WebView (loadUrl)中的代码在Android7中不起作用,但在Android4中起作用
EN

Stack Overflow用户
提问于 2018-12-03 20:44:47
回答 1查看 530关注 0票数 0

我的Android应用程序有一个活动,在从磁盘(而不是互联网)加载XHTML页面后,脚本被注入到WebView中。

这个应用程序最初的目标是API级别12,并编译到相同的SDK级别,但我不得不更新它,新的规则使我的目标API级别26。

我还编译到了不同的SDK级别,比如17、19,因为我必须在对象的公共方法上使用@JavascriptInterface注释,以允许脚本调用Java代码中的方法。

我的经验是,WebView被卡住是因为出现错误“未捕获SyntaxError:输入意外结束”( Chrome远程调试没有更多信息),如果我在安卓7设备上测试应用程序,而应用程序在安卓4设备上运行,即使应用程序的应用程序接口级别没有针对或编译到,也会发生这种情况。

我读了很多关于语法错误导致这种错误的答案,或者代码中的注释行,但这非常奇怪,因为旧设备没有问题,应用程序运行得很好。

我在gradle文件中尝试了许多组合。

有没有其他可能考虑让我的应用程序正常工作?

EN

回答 1

Stack Overflow用户

发布于 2018-12-06 03:55:35

许多原因可能导致类似或类似的错误(通常错误消息没有帮助或意义)。首先,如果您可以拥有最低SDK = API级别19 (KITKAT,Android 4.4)或更高级别,请使用

webView.evaluateJavascript(String script,new ValueCallback<String>() {
                        @Override
                        public void onReceiveValue(String s) {

                        }
                    });

而不是

webView.loadUrl("javascript: doSomething();");

从KITKAT以上的安卓版本(4.4)有Chrome WebView而不是旧的安卓WebView,新的版本在JavaScript注入的loadUrl上有问题,它在评估JavaScript (或者它有一些bug)方面更严格。

在使用loadUrl (以及一般情况下)时,请注意:

-Using字符串文字分隔符的双引号而不是单引号(但在某些特殊情况下可能不是),

示例:

ch=""\"; //it is good
ch='"'; // it is bad

-When在源代码行中使用双引号作为分隔符将代码注入到事件侦听器中。

示例:

var string="parameter";
element.setAttribute("onclick","doSomething('"+stringVar+"');return false;"); // good

-Using curly brakets在"if“子句后面,而不是一个直接语句,例如:

if (i>0) {doSomething(i);} // good 

if (i>0) doSomething(i); // bad

-Being注意正则表达式(某些字符可能对正则表达式本身、结果以及JavaScript解释器/编译器造成伤害)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53594132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档