iOS webView與JS交互、相互傳值(干貨)

一塘幅、webView調(diào)用js代碼并向JS內(nèi)傳值

方法一 webView 執(zhí)行js 函數(shù)
- (void)webViewDidFinishLoad:(UIWebView *)webView{
    [webView stringByEvaluatingJavaScriptFromString:@"ocCallJSFunction({'name':'vix'})"];
}
#test.js
function ocCallJSFunction(data) {
    var obj = eval(data);
    alert(obj.name);
}
方法二 獲取js上下文 執(zhí)行js函數(shù)
- (void)webViewDidFinishLoad:(UIWebView *)webView{
    JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    [context evaluateScript:@"ocCallJSFunction({'name':'vix'})"];
}
#test.js
function ocCallJSFunction(data) {
    var obj = eval(data);
    alert(obj.name);
}
方式三 JS調(diào)用原生OC的方法营曼,并傳值
首先xxx.h設(shè)置JSExport協(xié)議
@protocol JSObjDelegate <JSExport>
- (NSString *)sayHello;
@end
在xxx.m中遵守協(xié)議<JSObjDelegate>

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    //定義好JS要調(diào)用的方法乒验,sayHello就是調(diào)用的方法名
    context[@"app"] = self;//遵守協(xié)議 app為js中定義的一個類用來調(diào)用sayHello方法
}
- (NSString *)sayHello {
    return "Hello OC";
}

二、js向OC傳值

一蒂阱、截取webView內(nèi)鏈接進(jìn)行傳值
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

{
NSString *url = request.URL.absoluteString;  
if ([url rangeOfString:@
"[vix://](vix://)"
].location != NSNotFound) { 
// url的協(xié)議頭是vix
NSLog(@"===%@", url);//獲取url中攜帶的值     
return NO;
}
return YES;
}
二锻全、捕獲JS里面的方法和方法內(nèi)的參數(shù)
- (void)webViewDidFinishLoad:(UIWebView *)webView {
    JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    //定義好JS要調(diào)用的方法,ocCallJSFunction就是調(diào)用的方法名
    context[@"ocCallJSFunction"] = ^{
        NSLog(@"+++++++Begin Log+++++++ ");
        NSArray *args = [JSContext currentArguments];
        for (JSValue *jsVal in args) {
            NSLog(@"%@", jsVal.toString);//獲取js內(nèi)參數(shù)值123
        }
    };
}
#xxx.js
function sayHello(){
//    alert("hello");
    ocCallJSFunction("123")
}
html录煤、js鳄厌、css代碼
#html代碼
<!DOCTYPE html>
<html>
<head lang="zh">
    <meta charset="UTF-8">
    <title>第一個HTML</title>
    <link rel="stylesheet" type="text/css" href="test.css">
    <script type="text/javascript" src="test.js"></script>
</head>
<body>
<h1>我是HTML</h1>
<p id = "p">p標(biāo)簽</p>
<br/><br/><br/>
<button onclick = "sayHello()">點(diǎn)擊我彈出hello</button>
</body>
</html>

#css代碼
#p{
    color:red;
}
#img{
    width:120px;
    height:50px;
}
#a{
    color:yellow;
}

#js代碼
function sayHello("123"){
//    alert("hello");
    ocCallJSFunction("123")
}

//function ocCallJSFunction(data) {
//        var obj = eval(data);
//        alert(obj.name);
//       }

三、獲取頁面內(nèi)的任意標(biāo)簽屬性的值

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    
    NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];//獲取當(dāng)前頁面的title
NSString *html = @"document.documentElement.innerHTML";//獲取當(dāng)前網(wǎng)頁的html
NSString *html2 = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('creditNum').innerText"];//獲取id為creditNum標(biāo)簽的值
NSString *html3 = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('zmScore').value"];//獲取標(biāo)簽為id為zmScore的value
NSString *html2 = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('p')[0].innerText"];//獲取標(biāo)簽第一個p的值
NSString *html2 = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerText"];//獲取body里面的全部內(nèi)容
}

附html代碼如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>1234</title>
    </head>
    <style type="text/css">
        .issue{
            font-family: "微軟雅黑";
            font-size: 1.2em;
            font-weight: 900;
        }
        .answer{
            font-family: "微軟雅黑";
            font-size: 1em;
            margin-top:-15px;
        }
    </style>
    <body>
        <input type='hidden' id='zmScore' value='719'/><input type='hidden' id='freeDeposit' value='true'/>
        <p id="creditNum"> 791 </P>
        <p class="issue">Q:什么是騎行券妈踊?</p>
        <p class="answer">A:騎行費(fèi)用的電子券了嚎。</p>
        
        <p class="issue">Q:如何獲得騎行券?</p>
        <p class="answer">A:關(guān)注運(yùn)營方舉辦的活動廊营。</p>
        
        <p class="issue">Q:如何使用騎行券歪泳?</p>
        <p class="answer">A:無需用戶手動選擇。</p>
        
        <p class="issue">Q:一次騎行能有幾張騎行券露筒?</p>
        <p class="answer">A:每次騎行結(jié)算只能使用一張騎行券呐伞。</p>
        
    </body>
</html>

持續(xù)更新中 ~ (??)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市慎式,隨后出現(xiàn)的幾起案子伶氢,更是在濱河造成了極大的恐慌假哎,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞍历,死亡現(xiàn)場離奇詭異舵抹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)劣砍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門惧蛹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刑枝,你說我怎么就攤上這事香嗓。” “怎么了装畅?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵靠娱,是天一觀的道長。 經(jīng)常有香客問我掠兄,道長像云,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任蚂夕,我火速辦了婚禮迅诬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘婿牍。我一直安慰自己侈贷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布等脂。 她就那樣靜靜地躺著俏蛮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪上遥。 梳的紋絲不亂的頭發(fā)上搏屑,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機(jī)與錄音露该,去河邊找鬼睬棚。 笑死,一個胖子當(dāng)著我的面吹牛解幼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播包警,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼撵摆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了害晦?” 一聲冷哼從身側(cè)響起特铝,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤暑中,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鲫剿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鳄逾,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年灵莲,在試婚紗的時候發(fā)現(xiàn)自己被綠了雕凹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡政冻,死狀恐怖枚抵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情明场,我是刑警寧澤汽摹,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站苦锨,受9級特大地震影響逼泣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舟舒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一圾旨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魏蔗,春花似錦砍的、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谣旁,卻和暖如春床佳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背榄审。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工砌们, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搁进。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓浪感,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饼问。 傳聞我的和親對象是個殘疾皇子影兽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容