js調android
① Android調用js的問題
android怎樣調用js文件裡面的方法
如果多個線程同時訪問一個集合,而其中至少一個線程修改了該集合,那麼它必須 保持外部同步。這通常是通過對自然封裝該集合的對象執行同步操作來完成的。如果不存在這樣的對象,則應該使用 Collections.synchronizedSet 方法來「包裝」集合。最好在創建時完成這一操作,以防止對 HashSet 實例進行意外的不同步訪問:
Set s = Collections.synchronizedSet(new HashSet(...));
② js 中調用android中的方法,復雜參數怎麼對應
webview中js調用本地java方法,這個功能實現起來稍微有點麻煩,不過也不怎麼復雜,首先要對webview綁定javascriptInterface,js腳本通過這個介面來調用java代碼。
contentWebView.addJavascriptInterface(this, "wst"); javainterface實際就是一個普通的java類,裡面是我們本地實現的java代碼, 將object 傳遞給webview,並指定別名,這樣js腳本就可以通過我們給的這個別名來調用我們的方法,在上面的代碼中,this是實例化的對象,wst是這個對象在js中的別名
③ 怎麼在web工程的jsp頁面的js中調用android工程的中的activity中的方法
通過webview打開jsp頁面,然後與activity進行交互。
步驟
第一步:設置支持腳本
mWebView=(WebView)findViewById(R.id.webview);
WebSettingswebSettings=mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);//設置webview支持腳本
第二步:在activity中給webview增加js交互external介面demo
mWebView.addJavascriptInterface(newDemoJavaScriptInterface(),"demo");//增加js介面交互external別名demo
{
DemoJavaScriptInterface(){
}
publicvoidclickOnAndroid(){
}
}
第三步:js訪問activity
<aonClick="window.demo.clickOnAndroid()">單擊我訪問activity的方法</a>
④ js怎麼跟Android和ios進行交互呢
Android和ios都是用navtive語言編寫的app,那麼調用js的方法如下:
Native 調用 JS:
本質就一個方法,通過 ,都是同步。
1.通常方法:js修通過改doucument的loaction或者新建一個看不見的iFrame,修改它的 src,就會觸發回調 webView 的 shouldStartLoadWithRequest,參數 request 的 url 就是新賦值的 location 或者 url,上層截獲這個 url 的參數,對此分發即可。 這個都是非同步調用的。
如 JS function:
var messagingIframe;
messagingIframe = document.createElement('iframe');
messagingIframe.style.display = 'none';
document.documentElement.appendChild(messagingIframe);
function TestIOSJS(){
messagingIframe.src = "ios/test/click";
};
當觸發上面的JS時,webview會收到下面的回調:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *url = request.URL.absoluteString;
if([url hasSuffix:@"ios/test/click"]){
//do something you want
return NO;
}
return YES;
}
通過截獲這個request的參數就可以做native需要做的事情。
⑤ JS 調用android的方法該怎麼調
<body>
<!-- Calls into the javascript interface for the activity -->
<!-- 從HTML文件中調用activity中的函數 -->
<!-- 也就是從HTML到android程序 留意window.demo.clickOnAndroid()這句話 -->
<a onClick="window.demo.clickOnAndroid()">Click</a>
</body>
mWebView.addJavascriptInterface(newDemoJavaScriptInterface(),"demo");
{
DemoJavaScriptInterface(){
}
/**
*ThisisnotcalledontheUIthread.Postarunnabletoinvoke
*
*loadUrlontheUIthread.
*
*/
publicvoidclickOnAndroid(){//注意這里的名稱。它為clickOnAndroid(),注意,注意,嚴重注意
mHandler.post(newRunnable(){
publicvoidrun(){
Toast.makeText....
}
});
}
}
⑥ 如何在JAVASCRIPT調用Android JAVA函數
你好:
一、網頁的JS代碼調用ANDROID中JAVA代碼的方法
在網頁中調用java代碼、需要在webview控制項中添加javascriptInterface
contentWebView = (WebView) findViewById(R.id.webview);
//啟用javascript
contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.addJavascriptInterface(this, "js對象名");
在Activity中定義一個要被js調用的方法、src為js傳遞過來的參數、如果沒有不傳也可以
public void jsFunction(final String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
//在里對Android應用的UI進行處理
}
});
}
在網頁中、只需要像調用js方法一樣、進行調用就可以
<a onClick="window.js對象名.jsFunction(´hello world´)" >
點擊調用java代碼並傳遞參數
</a>
二、ANDROID中JAVA代碼調用網頁的JS代碼的方法
Java代碼調用js並傳參其實是通過WebView的loadUrl方法去調用的、只是參數url的寫法不一樣而已
// 無參數調用
contentWebView.loadUrl("javascript:javacalljs()");
// 傳遞參數調用
contentWebView.loadUrl("javascript:javacalljswithargs("
+ "´hello world´" + ")");
三、JAVA和JS交互注意事項
1、Java 調用 js 裡面的函數、效率並不是很高、估計要200ms左右吧、做交互性很強的事情、這種速度很難讓人接受、而js去調Java的方法、速度很快、50ms左右、所以盡量用js調用Java方法
2、Java 調用 js 的函數、沒有返回值、調用了就控制不到了
3、Js 調用 Java 的方法、返回值如果是字元串、你會發現這個字元串是 native 的、轉成 locale 的才能正常使用、使用 toLocaleString() 函數就可以了、不過這個函數的速度並不快、轉化的字元串如果很多、將會很耗費時間
4、網頁中盡量不要使用jQuery、執行起來需要5-6秒、最好使用原生的js寫業務腳本、以提升載入速度、改善用戶體驗