android呼叫JS失敗時可能的原因
客戶端需要呼叫JS,完成前後端的互動,更新前端的介面等。
一般來說,只需要呼叫下面一句話就可以呼叫JS中alipayCallBack()方法。
String msg = "message";
webView.loadUrl("javascript:showInfoFromJava(" + msg + ")");
但是在功能實現的時候失敗了。web報這個錯誤:
web console uncaught referenceerror: message is not defined at null:1
意思就是web認為message是一個變數名,而不是一個變數值。查了一下,發現JS定義String變數的時候用單引號,而JAVA是使用雙引號。
因此把程式碼改成
String msg = "message";
webView.loadUrl("javascript:showInfoFromJava('" + msg + "')");
通過新增單引號,JS就知道message是變數值而不是變數名字了。在呼叫含引數的JS方法時容易出現這個問題。
如果是不含引數的JS方法,則直接寫就好。例如下面,就直接呼叫了showInfoFromJava()方法。
webView.loadUrl("javascript:showInfoFromJava()");
android呼叫JS方法注意兩個程式設計方法中變量表示的不同。
還有其他4中情況,也可能會導致JS呼叫失敗,一併總結如下:
1. webView.getSettings().setJavaScriptEnable(true); 設定webView支援JavaScript
2. webView.addJavascriptInterface(new JSCallBack(), “JSCallBack”); 繫結一個java物件webView,就是把一個Java物件和網頁JS相關聯。
3. 在JSCallBack類中,增加@JavascriptInterface註解,匯入android.webkit.JavascriptInterface;
4. 檢查ManiFeast,將android:targetSdkVersion改成17及一下。<其實我自己的工程就是17,但是沒有影響>
附上部分Html程式碼:
<html>
<body>
<script type="text/javascript">
var a = document.documentElement.clientHeight;
document.getElementById("id").style.height = a+"px";
</script>
<script>
function showInfoFromJava(msg){
alert(msg);
}
</script>
</body>
</html>
相關推薦
android呼叫JS失敗時可能的原因
客戶端需要呼叫JS,完成前後端的互動,更新前端的介面等。 一般來說,只需要呼叫下面一句話就可以呼叫JS中alipayCallBack()方法。 String msg = "message"; webView.loadUrl("javascript:s
iOS WKWebView呼叫JS事件時丟擲的Error
問題 具體程式碼: NSString *api = [URL.absoluteString stringByRemovingPercentEncoding]; NSString *result = [NSString jh_JSONStringFromDictionary:res
tomcat載入webapp下自定義web專案失敗的可能原因(最奇葩的那個)
上面半段純屬反省,原因在末尾 我遇到的問題如下: tomcat的正常訪問沒問題,但是我加到webapp資料夾下的web專案沒法執行,老是 not found 404 ,嘗試了無數次,我都放棄了一整天了,但是沒辦法啊,我看的教程必須用這個,所以第二天我爬起來繼續找問題,這天
android呼叫js方法
WebViewAcy給到 import android.content.Intent; import android.graphics.Bitmap; import android.net.http.SslError; import android.os.Build; im
spring+mybatis 多資料來源切換失敗的可能原因。
可能因為,加了事務。 //@Transactional(readOnly = false) // 需要事務操作必須加入此註解 就因為加了事務,導致了,問題的出現。 不然setCustomerType,也沒有出現應有的結果。 害得我把spring的框架都改寫了,不過由於
WebView呼叫JS失敗問題總結
背景說明 最近在專案裡需要在WebView呼叫JS方法,遇到了一些坑,在此記錄下來。方便以後查找回顧。 一般來說,如果需要在WebView呼叫JS方法,只需要進行以下幾步: 1、設定WebView支援JS webSettings.setJavaScrip
android 呼叫js webView網頁,點選提交按鈕無效(注意加上setWebChromeClient())
// 如果不設定這個,JS程式碼中的按鈕會顯示,但是按下去卻不彈出對話方塊 // Sets the chrome handler. This is an implementation of WebChromeClient // for
Spring-data-jpa生成表格失敗的可能原因
一、配置錯誤 spring-jpa-properties-hibernate-hbm2ddl-auto=update 如果是設定成create則是每次啟動都建立新表,可能造成資料丟失,如果是create-drop則是關閉時刪除表。 二、表格欄位中使用了my
註解方式定義的spring component打jar後,掃描失敗的可能原因
情況是這樣的:web工程採用了ssh框架,dao和service都是通過annotation方式注入的,工程執行正常。後來把service和dao打成jar放在工程的lib目錄下,問題來了,配置沒改動,結果就是不能自動注入dao和service。但是如果把da
JS呼叫Android裡面的方法,Android呼叫JS裡面的方法
Android WebView 在公司Android的開發過程中遇到一個新的問題,那就是讓android程式碼和Javascript程式碼進行互動,然後在網上找到了關於webView的資料,之前並沒有深入去了解WebView,一直以為Android 的
Netty 發送消息失敗或者接收消息失敗的可能原因
建立 對象 丟失 是否 可能 獲取 style 原因 pan 1. 消息發送失敗: 檢查通道是否建立成功 Netty中的通道建立采用的是異步方式,獲取到的通道對象可能為空或初始化未完成; 2. 接收的消息有丟失 消息可能會粘包,是否有拆包機制 N
Android呼叫js方法以及js呼叫Android方法
Android的一般使用WebView.loadUrl(url);載入指定的|網頁檔案展示,並且可以實現的JavaScript指令碼與本地的Java程式碼的互動。 1、Android 的WebView載入html頁面 WebView myWebView =
關於Service方法呼叫時出現org.apache.ibatis.binding.BindingException錯誤的可能原因
專案是SpringBoot + Mybatis構建的。關鍵元件版本如下:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo
js使用ajax方法遇到的servlet傳值失敗的可能情況
最近開發使用ajax技術,經常用到傳遞引數到servlet,由於js中對於servlet傳遞失敗不做提示,有時發生傳值失敗的情況卻找不出bug的原因氣的要砸電腦。苦逼的日子過去了,整理一下自己曾經犯過的錯誤,如大家在ajax傳servlet失敗時,也可能發生類似錯誤: 1.servle
chrome安裝或更新失敗可能原因及解決辦法
Chrome在安裝或更新時,可能會出現0x80070057、0x80040154、0x80004002、0x8004070c、0x80080005、0x80072EFD、0x80072EE2等錯誤,本文說明如何解決這些問題。 解決Chrome安裝或更新中出現的0x80070057等錯誤
安卓混淆之後,android與js互動異常原因
解決方案:需要js互動程式碼不被混淆掉,加入以下程式碼即可 -keepclassmembers class com.taohaohuo365.taohaohuo.activity.H5Activity$AndroidAndJSInterface { public *; } -keepcla
Vue:與android做通訊,android呼叫WebAPP JS方法
這幾天遇到個需求,沒搞過頭大的很! Web給android提供一個呼叫方法供android呼叫並返回android引數。 首先最重要的是要將函式掛載到window裡去,這裡是最懵的地方。 Android.getClient(msg) 在Vue專案裡呼叫是會報錯,不過沒關係
使用BN時ValueError: expected 2D or 3D input (got 4D input)的可能原因
可能原因在於應該使用 BatchNorm2d 而你使用了 BatchNorm1d 如果是BatchNorm1d的話,input的形狀應該是: Input: :math:`(N, C)` or :math:`(N, C, L)` 如果是BatchNorm2d的話,i
[iOS]通過JS呼叫iOS函式時的URL編碼問題
在前面的文章:[iOS]在WebApp中怎樣使用JS呼叫iOS的函式 中,提到了怎樣使用JS通過改動URL呼叫iOS的內部函式。 當中會遇到一個問題,就是編碼問題。比方通過URL呼叫彈窗,在裡面寫上內容:你好汪海。 那連結大概就是這種:http://xx
Unity Android IL2CPP 編譯報錯的一種可能原因
Unity 版本 5.6.6f2 在使用 Android 的 IL2CPP 時,發生編譯報錯,報錯內容如下所示: stdout: IL2CPP error (no further information about what managed code was being co