iphonejs和ios交互,ios與js交互

本文目錄一覽:

iOS – OC 與 JS 交互六種方式總結

在 APP 中,免不了與 H5頁面打交道,所以掌握 與 JS 交互就顯的至關重要,本文總結了常見的與 JS 交互方式。

注意事項

在 OC 原生中

在 html 文件中

早期的JS與原生交互的開源庫很多都是用得這種方式來實現的,例如:PhoneGap、 WebViewJavascriptBridge 。

效果圖

使用WKNavigationDelegate中的代理方法,攔截自定義的 URL 來實現 JS 調用 OC 方法。

注意點

關於如何區分執行不同的OC 方法,也與UIWebView的處理方式一樣,通過URL 的host 來區分執行不同的方法:

JS 調用OC 方法後,有的操作可能需要將結果返回給JS。這時候就是OC 調用JS 方法的場景。

WKWebView 提供了一個新的方法 evaluateJavaScript:completionHandler: ,實現OC 調用JS 等場景。

注意點

運行結果

在iOS 7之後,apple添加了一個新的庫JavaScriptCore,用來做JS交互,因此JS與原生OC交互也變得簡單了許多。

首先導入JavaScriptCore庫, 然後在OC中獲取JS的上下文。

再然後定義好JS需要調用的方法,例如JS要調用share方法:

則可以在UIWebView載入url完成後,在其代理方法中添加要調用的share方法:

OC 調用 JS 方法有多種,首先介紹使用JavaScriptCore框架的方式。

使用JSContext 的方法 -evaluateScript ,可以實現 OC 調用 JS 方法

效果圖

使用WKWebView的時候,如果想要實現JS調用OC方法,除了攔截URL之外,還有一種簡單的方式。那就是利用WKWebView的新特性MessageHandler來實現JS調用原生方法。

創建 WKWebViewConfiguration 對象,配置各個API對應的MessageHandler。

然後在界面即將顯示的時候添加MessageHandler

需要注意的是addScriptMessageHandler很容易引起循環引用,導致控制器無法被釋放,所以需要移除MessageHandler

這裡實現了兩個協議 WKUIDelegate,WKScriptMessageHandler , WKUIDelegate 是因為我在JS中彈出了alert 。 WKScriptMessageHandler 是因為我們要處理JS調用OC方法的請求。

WKScriptMessage 有兩個關鍵屬性 name 和 body 。

因為我們給每一個OC 方法取了一個name,那麼我們就可以根據name 來區分執行不同的方法。body 中存著JS 要給OC 傳的參數。

關於參數body 的解析,我就舉一個body中放字典的例子,其他的稍後可以看demo。

解析JS 調用OC 實現分享的參數:

message.boby 就是JS 里傳過來的參數。我們不同的方法先做一下容錯性判斷。然後正常取值就可以了。

下面只列舉一個shareClick()方法,其他看Demo

這裡使用WKWebView 實現OC 調用JS方法與之前說的文章一樣,通過

– evaluateJavaScript:completionHandler:

效果圖如下圖所示

詳情看下面文章鏈接

iOS下 JS 與 OC 互相調用(五) – UIWebView+WebViewJavascriptBridge

詳情看下面文章鏈接

iOS下 JS 與 OC 互相調用(六) – WKWebView+WKWebViewJavascriptBridge

iOS下 JS 與OC 互相調用(一) – UIWebView 攔截 URL

iOS下 JS 與OC 互相調用(二) – JavaScriptCore

iOS 下 JS 與 OC 互相調用(三) – WKWebView 攔截 URL

iOS下JS與OC互相調用(四)-MessageHandler

iOS下 JS 與 OC 互相調用(五) – UIWebView+WebViewJavascriptBridge

iOS下 JS 與 OC 互相調用(六) – WKWebView+WKWebViewJavascriptBridge

js怎麼跟Android和ios進行交互呢?

Android和ios都是用navtive語言編寫的app,那麼調用js的方法如下:

Native 調用 JS:

本質就一個方法,通過 stringByEvaluatingJavaScriptFromString,都是同步。

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需要做的事情。

iOS 原生與JS交互 (webkit + js)

       鑒於最近項目中需要用到原生與JS交互,以前做過交互,但是沒有總結一個demo,這次做的時候都忘記了,所以這次做了一個swift 和 OC 的demo。方便以後需要用交互功能的時候查看。

由於也沒有難的點,所以這裡就不做技術上的講解了。直接上的地址:   iOS webKit (swift + oc) 原生交互Demo .  demo里包含了Swift 版和 OC版  ,由於UIWebView的性能相比webkit而言,相差甚遠,在加上現在的項目基本都支持8.0以上的系統,所以基本可以放棄UIWebview了。

原生APP中js怎樣與Android和ios進行交互

一、對於Android和ios我們要執行不同的操作,下面是判斷系統的js代碼

// alert(ismobile(1)); 1表示Android,0表示ios

function ismobile(test){

var u = navigator.userAgent, app = navigator.appVersion;

if(/AppleWebKit.*Mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test(navigator.userAgent))){

if(window.location.href.indexOf(“?mobile”)lt;0){

try{

if(/iPhone|mac|iPod|iPad/i.test(navigator.userAgent)){

return ‘0’;

}else{

return ‘1’;

}

}catch(e){}

}

}else if( u.indexOf(‘iPad’) gt; -1){

return ‘0’;

}else{

return ‘1’;

}

}

二、js調用app端函數,下面是js代碼

if(ismobile(1)==1){

Android.setTypeActivity(id,type,href);

}else{

jsToios(id,type,href);

}

setTypeActivity是Android端定義的函數,jsToios是ios端定義的函數,括弧里是js端傳遞的參數。

三、至於js端怎樣獲取app端的數據,只需在js端提供給app端函數名字,在通知app端調用即可

四、還有一種方法可以不通過app的方法將數據傳遞給另一個頁面,那就是通過URL的方式

在本頁面將數據拼接在ip後面

在另外一個頁面通過下面方法獲取URL後的參數

function GetRequest() {

var url = location.search; //獲取url中”?”符後的字串

var theRequest = new Object();

if (url.indexOf(“?”) != -1) {

var str = url.substr(1);

strs = str.split(“”);

for(var i = 0; i strs.length; i ++) {

theRequest[strs[i].split(“=”)[0]]=decodeURIComponent(strs[i].split(“=”)[1]);

}

}

return theRequest;

}

// 獲取URL參數

var Request = new Object();

Request = GetRequest();

var name;

name = Request[‘name’];

iOS中WkWebView與js交互

1、初始化wkwebview

2、獲取js返回的信息

3、原生調用js方法

4、攔截url(可在此方法中實現判斷url執行相應的oc方法):js會嘗試載入某個URL,客戶端在載入前攔截這個URL,通過解析這個URL識別它的內容,調用相應的原生方法,並阻止瀏覽器載入這個URL

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/258417.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:49
下一篇 2024-12-15 12:49

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • JS圖片沿著SVG路徑移動實現方法

    本文將為大家詳細介紹如何使用JS實現圖片沿著SVG路徑移動的效果,包括路徑製作、路徑效果、以及實現代碼等內容。 一、路徑製作 路徑的製作,我們需要使用到SVG,SVG是可縮放矢量圖…

    編程 2025-04-27
  • 如何使用JS調用Python腳本

    本文將詳細介紹通過JS調用Python腳本的方法,包括使用Node.js、Python shell、child_process等三種方法,以及在Web應用中的應用。 一、使用Nod…

    編程 2025-04-27
  • iOS開發如何添加許可權

    在iOS開發中,為了保護用戶的隱私和安全,應用程序可能需要請求一些許可權。 一、請求應用程序許可權 應用程序不得在用戶未給予許可的情況下獲取用戶數據。許多iOS系統功能都需要獲得用戶的…

    編程 2025-04-27
  • 如何反混淆美團slider.js

    本文將從多個方面詳細闡述如何反混淆美團slider.js。在開始之前,需要明確的是,混淆是一種保護JavaScript代碼的方法,其目的是使代碼難以理解和修改。因此,在進行反混淆操…

    編程 2025-04-27
  • Python要學JS嗎?

    Python和JavaScript都是非常受歡迎的編程語言。然而,你可能會問,既然我已經學了Python,是不是也需要學一下JS呢?在本文中,我們將圍繞這個問題進行討論,並從多個角…

    編程 2025-04-27
  • 解決js ajax post 419問題

    對於使用ajax post請求時出現的419問題,我們需要進行以下幾個方面的闡述,包括返回碼的含義、可能出現的情況、解決方案等內容。 一、解析419返回碼 419返回碼錶示用戶超時…

    編程 2025-04-27

發表回復

登錄後才能評論