1. 程式人生 > >android呼叫JS失敗時可能的原因

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等錯誤

安卓混淆之後,androidjs互動異常原因

解決方案:需要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專案裡呼叫是會報錯,不過沒關係

使用BNValueError: 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