Ⅰ android webview js 交互 怎麼調用js 的new
android webview js 交互 調用
第一步:
mainfest.xml中加入網路許可權
[java] view plain
<uses-permission android:name="android.permission.INTERNET" />
第二步:
載入本地寫好的html文件(定義好js中提供給android調用的方法 funFromjs(),和android提供給js調用的對象介面fun1FromAndroid(String name)),放在 assets目錄下。
[html] view plain
<body>
<a>js中調用本地方法</a>
<script>
function funFromjs(){
document.getElementById("helloweb").innerHTML="HelloWebView,i'm from js";
}
var aTag = document.getElementsByTagName('a')[0];
aTag.addEventListener('click', function(){
//調用android本地方法
myObj.fun1FromAndroid("調用android本地方法fun1FromAndroid(String name)!!");
return false;
}, false);
</script>
<p></p>
<div id="helloweb">
</div>
</body>
第三步:
實現android工程與js交互的相關代碼
android主題代碼:
[java] view plain
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化
initViews();
//設置編碼
mWebView.getSettings().setDefaultTextEncodingName("utf-8");
//支持js
mWebView.getSettings().setJavaScriptEnabled(true);
//設置背景顏色 透明
mWebView.setBackgroundColor(Color.argb(0, 0, 0, 0));
//設置本地調用對象及其介面
mWebView.addJavascriptInterface(new JavaScriptObject(mContext), "myObj");
//載入js
mWebView.loadUrl("file:///android_asset/test.html");
//點擊調用js中方法
mBtn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mWebView.loadUrl("javascript:funFromjs()");
Toast.makeText(mContext, "調用javascript:funFromjs()", Toast.LENGTH_LONG).show();
}
});
}
js調用的android對象方法定義
[java] view plain
public class JavaScriptObject {
Context mContxt;
@JavascriptInterface //sdk17版本以上加上註解
public JavaScriptObject(Context mContxt) {
this.mContxt = mContxt;
}
public void fun1FromAndroid(String name) {
Toast.makeText(mContxt, name, Toast.LENGTH_LONG).show();
}
public void fun2(String name) {
Toast.makeText(mContxt, "調用fun2:" + name, Toast.LENGTH_SHORT).show();
}
}
Ⅱ (IOS)UIWebView和JavaScript之間是怎麼交互的
UIWebView是iOS SDK中渲染網面的控制項,在顯示網頁的時候,可以hack網頁然後顯示想顯示的內容。其中就要用至JavaScript的知識,而UIWebView與javascript交互的 方法就是,有了這個方法可以通過objc調用 javascript,可以注入 javascript
Js調用〇C方法原理就是利用UIWebView重定向請求,傳一些命令到我們的 UIWebView,在UIWebView的delegate的方法中接收這些命令,並根據命令執行相應的objc 方法。這樣就相當於在javascript中調用objc的方法。
擴展: 在android中,有固有組件webview,經過設置可以讓它支持我們的js的渲染,然後在代碼中設置(WebViewClient/WebChromeClient)讓應用跳轉頁面時在本webview中跳 轉,通過webview.loarl (String str)方法可以在需要的地方載入我們前端的頁面或者調用 前端所定義的方法(wv.loadUrl(「javascript:sendDataToAndroid(『我是js,能看到嗎』)」);),再通過JavascriptInterface介面設置前端和android通訊的標識,
wv.addJavascriptInterface(new MJavascriptInterface(getApplicationContext()), 「WebViewFunc」);
這樣前端就可以在頁面上調用我們的方法了,funl方法是在android中定義的 Window.WebViewFunc.fun1 ();
總之,前端和android或者ios進行結合開發,被稱之為混合開發,原理就是在原生的開發語言中,提供了一個組件webview,這個組件就是原生語言的瀏覽器,但是得自行設置讓其能夠完美支持我們的應用,需要設置對應的標識,然後連接起來,稱之為 JavascriptInterfac。
Ⅲ javafx webview js交互問題
1、如果html文件在jar包內,就是在classpath就這樣載入
webView.getEngine().load(WebViewStyle.class.getResource("/com/html/ScriptToJava.html").toExternalForm());
2、如果html文件在項目之外
File file = new File("Resources/Html/Chat/show/show.html");
String absolutePath = file.getAbsolutePath();
absolutePath = absolutePath.replace("\", "/");
if (absolutePath.startsWith("/")) {
webView.getEngine().load("file:" + absolutePath);
}else {
webView.getEngine().load("file:/" + absolutePath);
}
3、js調用Java對象
(1)、Java class需要內是public
Ⅳ IOS APP 開發 swift 中 UIWebView 與 javascript 的交互
swift中的UIWebView可以通過WebviewJavaScriptBridge和OVGap跟js交互,這兩個庫都是讓webview與JS建立起一條橋梁,這樣就可以相互通信了。
通信例子:
function (callback) {
if (window.WebViewJavascriptBridge) {
callback(WebViewJavascriptBridge)
} else {
document.addEventListener('WebViewJavascriptBridgeReady', function() {
callback(WebViewJavascriptBridge)
}, false)
}
}
(function(bridge) {
var uniqueId = 1
function log(message, data) {
var log = document.getElementById('log')
var el = document.createElement('div')
el.className = 'logLine'
el.innerHTML = uniqueId++ + '. ' + message + ':<br/>' + JSON.stringify(data)
if (log.children.length) { log.insertBefore(el, log.children[0]) }
else { log.appendChild(el) }
}
bridge.init(function(message, responseCallback) {
log('JS got a message', message)
var data = { 'Javascript Responds':'Wee!' }
log('JS responding with', data)
responseCallback(data)
})
bridge.registerHandler('testJavascriptHandler', function(data, responseCallback) {
log('ObjC called testJavascriptHandler with', data)
var responseData = { 'Javascript Says':'Right back atcha!' }
log('JS responding with', responseData)
responseCallback(responseData)
})
var button = document.getElementById('buttons').appendChild(document.createElement('button'))
button.innerHTML = 'Send message to ObjC'
button.onclick = function(e) {
e.preventDefault()
var data = 'Hello from JS button'
log('JS sending message', data)
bridge.send(data, function(responseData) {
log('JS got response', responseData)
})
}
document.body.appendChild(document.createElement('br'))
var callbackButton = document.getElementById('buttons').appendChild(document.createElement('button'))
callbackButton.innerHTML = 'Fire testObjcCallback'
callbackButton.onclick = function(e) {
e.preventDefault()
log('JS calling handler "testObjcCallback"')
bridge.callHandler('testObjcCallback', {'foo': 'bar'}, function(response) {
log('JS got response', response)
})
}
})
</script>
Ⅳ webview 與js怎樣實現數據交互
對於android初學者應該都了解webView這個組件。之前我也是對其進行了一些簡單的了解,但是在一個項目中不得不用webview的時候,發現了webview的強大之處,今天就分享一下使用webview的一些經驗。
1、首先了解一下webview。
webview介紹的原文如下:A View that displays web pages. This class is the basis upon which you can roll your own web browser or simply display some online content within your Activity. It uses the WebKit rendering engine to display web pages and includes methods to navigate forward and backward through a history, zoom in and out, perform text searches and more.
從上面你應該了解到了基本功能,也就是顯示網頁。之所以我說webview功能強大是因為它和js的交互非常方便,很簡單就可以實現。
2、webview能做什麼?
①webView可以利用html做界面布局,雖然目前還比較少人這么使用,不過我相信當一些客戶端需要復雜的圖文(圖文都是動態生成)混排的時候它肯定是個不錯的選擇。
②直接顯示網頁,這功能當然也是它最基本的功能。
③和js交互。(如果你的js基礎比java基礎好的話那麼採用這種方式做一些復雜的處理是個不錯的選擇)。
3、如何使用webview?
這里直接用一個svn上取下的demo,先上demo後講解。demo的結構圖如下:
WebViewDemo.java
package com.google.android.webviewdemo;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
/**
* Demonstrates how to embed a WebView in your activity. Also demonstrates how
* to have javascript in the WebView call into the activity, and how the activity
* can invoke javascript.
* <p>
* In this example, clicking on the android in the WebView will result in a call into
* the activities code in {@link DemoJavaScriptInterface#clickOnAndroid()}. This code
* will turn around and invoke javascript using the {@link WebView#loadUrl(String)}
* method.
* <p>
* Obviously all of this could have been accomplished without calling into the activity
* and then back into javascript, but this code is intended to show how to set up the
* code paths for this sort of communication.
*
*/
public class WebViewDemo extends Activity {
private static final String LOG_TAG = "WebViewDemo";
private WebView mWebView;
private Handler mHandler = new Handler();
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
mWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setSavePassword(false);
webSettings.setSaveFormData(false);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(false);
mWebView.setWebChromeClient(new MyWebChromeClient());
mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
mWebView.loadUrl("file:///android_asset/demo.html");
}
final class DemoJavaScriptInterface {
DemoJavaScriptInterface() {
}
/**
* This is not called on the UI thread. Post a runnable to invoke
* loadUrl on the UI thread.
*/
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
mWebView.loadUrl("javascript:wave()");
}
});
}
}
/**
* Provides a hook for calling "alert" from javascript. Useful for
* debugging your javascript.
*/
final class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d(LOG_TAG, message);
result.confirm();
return true;
}
}
}
demo.html
<html>
<script language="javascript">
/* This function is invoked by the activity */
function wave() {
alert("1");
document.getElementById("droid").src="android_waving.png";
alert("2");
}
</script>
<body>
<!-- Calls into the javascript interface for the activity -->
<a onClick="window.demo.clickOnAndroid()"><div style="width:80px;
margin:0px auto;
padding:10px;
text-align:center;
border:2px solid #202020;" >
<img id="droid" src="android_normal.png"/><br>
Click me!
</div></a>
</body>
</html>
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/intro"
android:padding="4dip"
android:textSize="16sp"
/>
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
/>
</LinearLayout>
4、如何交互?
①android如何調用js。
調用 形式:
mWebView.loadUrl("javascript:wave()");
其中wave()是js中的一個方法,當然你可以把這個方法改成其他的方法,也就是android調用其他的方法。
②js如何調用android。
調用形式:
<a onClick="window.demo.clickOnAndroid()">
代碼中的「demo」是在android中指定的調用名稱,即
mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
代碼中的clickOnAndroid()是「demo」對應的對象:new DemoJavaScriptInterface() 中的一個方法。
③雙向交互。
當然是把前面的兩種方式組合一下就可以了。
5、講解demo。
現在你一定了解了android和js的交互了。是時候分析一些demo了,根據上面講的你也應該比較清楚了。具體交互流程如下:
①點擊圖片,則在js端直接調用android上的方法clickOnAndroid();
②clickOnAndroid()方法(利用線程)調用js的方法。
③被②調用的js直接控制html。
個人總結:利用webView的這種方式在有些時候UI布局就可以轉成相應的html代碼編寫了,而html布局樣式之類有DW這樣強大的工具,而且網上很多源碼,很多代碼片。在UI和視覺效果上就會節省很多時間,重復發明輪子沒有任何意義。
Ⅵ 在UWP中怎麼通過WebView控制項進行C#與JS的交互
本文收集於網路,只用於方便查找方案,感謝源作者,如果侵權請聯系刪除
在UWP中如何通過WebView控制項進行C#與JS的交互
最近由於項目需求,需要利用C#在UWP中與JS進行交互,由於還沒有什麼實戰經驗,所有就現在網上網路了一下,但是網路的結果顯示大部分都是在Android和IOS上面的方法,UWP中的幾乎沒有。還好微軟又他強大的MSDN社區,所有就在那裡面找到了一個解題思路,於是就分享給大家。
1、首先,我們既然要與JS進行交互,那必須先有一個HTML頁面才可以。我這里以一個本地的HTML頁面作為一個HTML頁面(別忘了裡面要有JS部分哦( ╯□╰ ) ,並添加到當前的UWP工程中),示例代碼如下所示:
1 <!DOCTYPE html>
2 <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <meta charset="utf-8" />
5 <title>Matt's Webview Content Page</title>
6 <script lang="en-us" type="text/javascript">
7 function TimeUpdate() {
8 var TimeTextbox = document.getElementById("TheTime");
9 TimeTextbox.value = new Date().toTimeString();
10 }
11 </script>
12 </head>
13 <body>
14 <h2>Matt's Webview Content Page</h2>
15 <h5>The current time is: <input type="text" id="TheTime" /> </h5>
16 <button onclick="TimeUpdate()">Update the time!</button>
17 </body>
18 </html>
上面這串HTML頁面的功能很簡單,就是直接獲取當前時間並顯示出來;
2、接下來,我們需要在在當前工程中進行前台的布局,布局很簡單,這里就直接列出示例代碼:
1 <Grid Background="{StaticResource }">
2 <StackPanel>
3 <WebView x:Name="MyWebview" Width="500" Height="500" Source="ms-appx-web:///HTMLPage1.html"/>
4 <Button x:Name="MyButton" Margin="10" Content="Invoke the TimeUpdate Javascript function from C# using this button" Click="MyButton_Click_1" HorizontalAlignment="Center"/>
5 </StackPanel>
WebView控制項用於顯示本地的一個HTML頁面,Button控制項用於與HTML中的JS進行交互(其實讓這個按鈕也可以觸發HTML中獲取當前時間並顯示的JS事件)
3、添加Button對應的事件,添加後台代碼:
1 private async void MyButton_Click_1(object sender, RoutedEventArgs e)
2 {
3 await MyWebview.InvokeScriptAsync("TimeUpdate", null); //第一個參數是要觸發的JS函數,第二個參數是要傳遞給該函數的參數
4 }
通過上面的三個步驟,我們就可以利用這個Button按鈕獲取當前時間並顯示在WebView中。