簡體   English   中英

Uncaught SyntaxError:輸入意外結束-向WebView(loadUrl)中注入JavaScript的代碼在Android 7中不起作用,但在Android 4中起作用

[英]Uncaught SyntaxError: Unexpected end of input - JavaScript injected code into WebView (loadUrl) doesn't work in Android 7 but it does in Android 4

我的Android應用程序具有一項活動,該活動是在從磁盤(而非Internet)加載XHTML頁面后,將腳本注入到WebView中。

該應用程序最初以API級別12為目標,並編譯為相同的SDK級別,但是我必須對其進行更新,而新規則使我以API級別26為目標。

我還編譯到了17、19等各種SDK級別,因為必須在對象的公共方法上使用@JavascriptInterface批注,該批注允許腳本調用Java代碼中的方法。

我的經驗是,由於發生錯誤“未捕獲的SyntaxError:意外的輸入結束”(Chrome遠程調試沒有進一步的信息),WebView被卡住了,並且僅當我在Android 7設備上測試該應用程序而該應用程序運行時才會發生這種情況即使未將其API級別定位或編譯到Android 4設備上。

我讀到許多有關導致此類錯誤的語法錯誤的答案,或代碼中的注釋行,但這很奇怪,因為舊設備沒有問題,並且該應用程序運行良好。

我在gradle文件中嘗試了許多組合。

還有其他可能性可以考慮讓我的應用正常運行嗎?

許多原因可能導致類似或類似的錯誤(錯誤消息通常無濟於事或無意義)。 首先,如果您的最低SDK = API級別19(KITKAT,Android 4.4)或更高,請使用

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

                        }
                    });

代替

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

高於(4.4)的KITKAT的Android版本具有Chrome WebView而不是舊的Android WebView,而新版本則存在用於JavaScript注入的loadUrl問題,實際上,它在評估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解釋器/編譯器造成傷害)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM