1. 程式人生 > >iOS中OC呼叫js方法簡述(一)

iOS中OC呼叫js方法簡述(一)

從iOS7開始 蘋果公佈了JavaScriptCore.framework 它使得JS與OC的互動更加方便了。 下面我們就簡單瞭解一下這個框架 首先我匯入framework 方法如下:

這裡寫圖片描述

點選Linked Frameworks and Libraries 的新增後 選擇 JavaScriptCore.framework

這裡寫圖片描述

選中JavaScriptCore.framework後 點選右下角Add 新增完成
好 建立完成之後我們匯入一下標頭檔案

#import <JavaScriptCore/JavaScriptCore.h>  

點進去 會看到如下幾個方法:


#import 
"JSContext.h" #import "JSValue.h" #import "JSManagedValue.h" #import "JSVirtualMachine.h" #import "JSExport.h"

這些方法我們等會再細講

下來我們建立一個UIWebView 用來測試

建立UIWebView

UIWebView *myWebView; 

初始化,新增,開啟網址


//初始化webview  
myWebView=[[UIWebView alloc]initWithFrame:CGRectMake(0, 22, [UIScreen mainScreen].bounds
.size.width, [UIScreen mainScreen].bounds.size.height-22)]; myWebView.delegate=self; //新增webview到當前viewcontroller的view上 [self.view addSubview:myWebView]; //網址 NSString *[email protected]"https://www.baidu.com"; NSURL *httpUrl=[NSURL URLWithString:httpStr]; NSURLRequest *httpRequest=[NSURLRequest
requestWithURL:httpUrl]; [myWebView loadRequest:httpRequest];

執行效果如下:

這裡寫圖片描述

下面我們來實現UIWebView的幾個代理方法
首先我們看下它的代理方法


@protocol UIWebViewDelegate <NSObject>  

@optional  
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;  
- (void)webViewDidStartLoad:(UIWebView *)webView;  
- (void)webViewDidFinishLoad:(UIWebView *)webView;  
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;  

@end  

每個方法的作用等會在帶裡面做註釋
首先我們新增協議

@interface ViewController ()<UIWebViewDelegate> 

實現代理方法


#pragma mark --webViewDelegate  
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType  
{  
    //網頁載入之前會呼叫此方法  

    //retrun YES 表示正常載入網頁 返回NO 將停止網頁載入  
    return YES;  
}  

-(void)webViewDidStartLoad:(UIWebView *)webView  
{  
    //開始載入網頁呼叫此方法  
}  

-(void)webViewDidFinishLoad:(UIWebView *)webView  
{  
    //網頁載入完成呼叫此方法  
}  

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error  
{  
    //網頁載入失敗 呼叫此方法  
} 

每個方法是什麼時候呼叫都在註釋裡面
下來我們先嚐試用oc呼叫一下js方法:


-(void)webViewDidFinishLoad:(UIWebView *)webView  
{  
    //網頁載入完成呼叫此方法  

    //首先建立JSContext 物件(此處通過當前webView的鍵獲取到jscontext)  
    JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];  
    NSString *[email protected]"alert('test js OC')"; //準備執行的js程式碼  
    [context evaluateScript:alertJS];//通過oc方法呼叫js的alert  

}  

執行效果如下:

這裡寫圖片描述

好了,我們已經實現了iOS 呼叫js

相關推薦

iOSOC呼叫js方法簡述

從iOS7開始 蘋果公佈了JavaScriptCore.framework 它使得JS與OC的互動更加方便了。 下面我們就簡單瞭解一下這個框架 首先我匯入framework 方法如下: 點選Linked Frameworks and Libraries 的

iOSJS互動,OC呼叫JS方法JS呼叫OC方法,URL解碼

 首先 iOS7開始 蘋果公佈了JavaScriptCore.framework 它使得JS與OC的互動更加方便了。  第一步:匯入framework  OC 呼叫JS方法 :(一句話即可) -(void)webViewDidFinishLoad:(UIWebV

node+ejs【封裝ejs模板直接呼叫js方法

封裝全域性函式 var myFunction = {}; /* * 字串擷取 * @str 擷取字串 * @start 開始擷取位置 * @end 結束擷取位置 */ myFu

iOS之獲取UITableViewCellUITextField的值方法總結

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSInteg

計算機視覺的變分方法-擴散Diffusion

最近在看一個計算機視覺中的變分方法系列的視訊,是德國慕尼黑工大出的,講課老師是LSD-SLAM的作者Daniel Cremers,老師講得很清楚,看了還是很有收穫的。我已經變成Cremers大神的腦殘粉了,有興趣看視訊的戳這裡Variational Methods for Computer Visi

原生JS去重--兩種方法去掉重複字元

所謂“去重”,即是去掉重複的字元。本篇部落格講述兩種方式去重,一種是比較簡單但程式碼比較囉嗦點的,另一種是有點深度但是簡潔的。  我直接寫JavaScript程式碼了。  方式一: function deleteRepetionChar(arr){ //先判斷輸入進

JS基礎知識【資料型別基本介紹,檢測資料型別端方法簡介】

1、基礎知識 ECMAScript(ES):規定了JS的一些基礎核心的知識(變數、資料型別、語法規範、操作語句等)  DOM:document object model 文件物件模型,裡面提供了一些屬性和方法,可以讓我們操作頁面中的元素  BOM:browser ob

iOS 設計模式之工廠方法模式FactoryMethod

工廠方法模式克服了簡單工廠模式違背開放-封閉原則的缺點,保持了封裝物件建立過程的優點。 要更換物件時,無論用簡單工廠模式還是工廠方法模式,都可以不用做大的改動,就可以實現,降低樂樂客戶程式與產品物件的耦合。 工廠方法模式是簡單工廠模式的進一步抽象和推廣,缺點

在PL/SQL呼叫Oracle ERP請求-提交單個請求

最近開發一個從PLM系統中通過工作流程向ORACLE ERP系統中匯入專案資訊的程式,Oracle ERP系統有獨立的請求模組,所以這樣我們只需呼叫到ERP模組中的請求即可,由於PLM系統用的是windchill,底層程式碼是JAVA程式,並且從PLM系統中匯出的資料需要經

iOSprotobuf和tcp長連結AsyncSocketscoket配合使用

在ios開發中,客戶端開發最重要的就是資料的獲取和展示了,說到獲取資料,AFN是目前用的最廣的類庫了吧,不過在實時資料tcp獲取上面,我們還是需要用到AsyncSocket這個類庫來進行開發。不過近日聽過網上google的一個protobuf協議十分好用,就研究

java執行緒阻塞之sleep、suspend、join、wait、resume、notify方法解析

java執行緒的5狀態包括create、runnable、running、blocked、dead。 create是指用new執行緒被建立,但是還沒有準備好各種資源。 runnable是指使用start啟動執行緒,這時候系統會為執行緒分配除cpu以外的所有需要的資源。 ru

JS常用屬性方法大全

1.輸出語句:document.write("");2.JS中的註釋為://3.傳統的HTML文件順序是:document->html->(head,body)4.一個瀏覽器視窗中的DOM順序是:window->(navigator,screen,histo

easyui.utils.js 自己封裝的 使用easyui過程方便操作和取值

注意:該easyui.utils.js  會在我自己使用過程中不斷完善,大家一起進步。 在js上新增 以下 (function($){   function  其他方法。 })(jQuery); 的目的是為了防止該js檔案中的function與瀏覽器本身的一些functi

jsp讀取數據庫內容

reat cor mysq ava roo 數據 state imp nav 在jsp中將數據庫表格內容讀出為一個表格,並在表格中添加超鏈接: 1 <%@ page language="java" contentType="text/html; charset=U

Android解析HTML網頁數據 第一個方法Jsoup

原生 日誌 href attr mage connect auto htm baidu 最近發現一些無聊的東西,就是抓取網頁上的數據,然後使用安卓原生代碼顯示出來,或者說借用網頁數據,用自定義的View顯示。 借助jsoup-1.10.2.jar庫,獲取並解析數據。(Jso

salesforce零基礎學習七十二項目的零碎知識點小總結

gin 不同 grant dmi ima -m ron 角色 com 項目終於告一段落,雖然比較苦逼,不過也學到了好多知識,總結一下,以後當作參考。 一.visualforce標簽中使用html相關的屬性使用 曾經看文檔沒有看得仔細,導致開發的時候走了一些彎路。還好得到

fullpage.js簡單教程

style 準備工作 iba 耐心 兼容性 css3 動畫 lin per orm 最近準備做一個全屏滾動的網頁,在網上搜了一堆教程,結果大多都是一些很籠統的使用方法,對我這種耐心不超過3秒的笨蛋來說,很晦澀很籠統,所以打算邊研究邊自己寫個教程,有什麽不懂的,我再回來翻看筆

Three.js入門篇創建一個場景

style api text webgl () mes utf 動畫 fun 上一面講述了向場景中添加物體對象。這一篇準備把每個功能點細細的講述一遍,一方面是為了加深自己的理解。另一方面希望能夠 幫助到有需要的人。 一、在學習WEBGL的時候,你應該先了解要創建一個WebG

機器學習之numpy庫常用的函數介紹

做的 string idt 維度 數據 round float 數值 array 1. mat() mat()與array的區別: mat是矩陣,數據必須是2維的,是array的子集,包含array的所有特性,所做的運算都是針對矩陣來進行的。 array是數組,數據可以是多

shell條件測試常用的語法

shell中條件測試常用的語法     shell   bashshell中條件測試常用的語法(一)執行條件測試表達式後通常會返回“真”或“假”,就像執行命令後的返回值為0表示真,非0表示假一樣。在bash編程裏,條件測試常用的語法形式如下:說明:(1)語法1與語法2是等價的,