Uncaught SyntaxError: Неожиданный конец ввода - JavaScript-код, введенный в WebView (loadUrl), не работает в Android 7, но работает в Android 4 - PullRequest
0 голосов
/ 03 декабря 2018

В моем приложении для Android есть действие, при котором сценарий внедряется в WebView после загрузки страницы XHTML с диска (не из Интернета).

Приложение изначально предназначалось для уровня API 12 и скомпилировано втот же уровень SDK, но мне пришлось обновить его, и новые правила сделали меня целевым уровнем API 26.

Я также скомпилировал для различных уровней SDK, таких как 17, 19, потому что я должен был использовать аннотацию @JavascriptInterface в открытых методахобъект, который позволяет сценарию вызывать методы, которые находятся в коде Java.

Я вижу, что WebView зависает из-за ошибки «Uncaught SyntaxError: Неожиданный конец ввода» (никакой дополнительной информации о Chrome remoteотладка), и это просто происходит, если я тестирую приложение на устройстве Android 7, в то время как приложение работает на устройстве Android 4, даже если его уровень API не настроен или не скомпилирован.

Я прочитал много ответов о синтаксисеошибки, приводящие к такого рода ошибкам или комментируемым строкам в коде, но это очень страннопотому что старое устройство не имеет проблем, и приложение работает очень хорошо.

Я перепробовал много комбинаций в файле Gradle.

Есть ли еще какая-нибудь возможность рассмотреть возможность работы моего приложения?

1 Ответ

0 голосов
/ 05 декабря 2018

Многие причины могут привести к таким ошибкам или подобным (часто сообщение об ошибке не является полезным или значимым).Прежде всего, если вы можете иметь минимальный SDK = API уровня 19 (KITKAT, Android 4.4) или выше, используйте

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

                        }
                    });

вместо

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

версий Android из KITKAT выше (4.4) иметь Chrome WebView вместо старого Android WebView, а у нового возникают проблемы с loadUrl для внедрения JavaScript, он более строг в оценке JavaScript (или имеет некоторые ошибки), на самом деле.

СloadUrl (и вообще) будьте осторожны:

- Использование двойных кавычек вместо одинарных кавычек для разделителей строковых литералов (но, возможно, не в некоторых особых случаях),

пример:

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

-При внедрении кода в прослушиватель событий с использованием двойных кавычек в качестве разделителя в строках исходного кода,

пример:

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

-Использование фигурных скобок после предложения «if», а не одно прямое выражение, пример:

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

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

-Будьте осторожны с регулярными выражениями (некоторые символы могут быть вредны для самого регулярного выражения, результата и, возможно, JavaScript интерпретатор / компилятор).

...