1. 程式人生 > >iOS webView和JS簡單互動處理

iOS webView和JS簡單互動處理

首先 

url = @"http://42.96.155.42:8080/crm/loginRelationServlet?openId=A786D29EBAD81123313619A2F19B9447&accessToken=8F796D79CE14E4C5A7AC194D8135E2BB&nickname=Mayer";

頁面原始檔:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>qq_user</title>
</head>
<body>
<a id="qq_userid">1000049</a>
<a id="qq_password">123456</a>
</body>
</html>

現在的目的是取出賬號(qq_userid所對應的值)和密碼(qq_password所對應的值)。

iOS客戶端中倘若獲取到網頁上的元素的最簡單的兩個方法:

1.在

shouldStartLoadWithRequest方法中拿到request的url,從而獲取url連線後面所附帶的引數。

2.利用webView的強大方法

stringByEvaluatingJavaScriptFromString

來獲取網頁上的具體元素。(而此種方法需要少許知道js語句)

在此,討論第二種方法。

- (void)webViewDidFinishLoad:(UIWebView *)webView

{

NSString

*String = @"UIWebViewiOS最常用的SDK之一,它有一個stringByEvaluatingJavaScriptFromString方法可以將javascript嵌入頁面中,通過這個方法我們可以在iOS中與UIWebView中的網頁元素互動";

NSString *user = @"document.getElementById('qq_userid').innerHTML";

NSString *pwd = @"document.getElementById('qq_password').innerHTML";

NSString *str = [NSString

stringWithFormat:@"document.getElementById('qq_userid').innerHTML ='%@';",String];

NSString *userResult = [selfstringByEvaluatingJavaScriptFromString:user];

NSString *pwdResult = [selfstringByEvaluatingJavaScriptFromString:pwd];

}

至此,可以拿到賬號和密碼。 警告1 stringByEvaluatingJavaScriptFromString:此方法的使用最好在webViewDidFinishLoad方法中呼叫 警告2 要想拿某個頁面上的元素,必須首先保證此頁面載入。(即在

shouldStartLoadWithRequest

方法中必須放回yes)

其實警告1也是基於警告2.

其方法的難點在於js語句的使用。

下面簡單的分析下js語句:

getElementById('qq_password') ==通過id獲取頁面元素。

innerHTML屬性 ==獲取html當前標籤的起始和結束裡面的內容

document.getElementById('qq_userid').innerHTML ='%@'; ==會修改所獲取到的值。

插入js 並執行js函式

NSString *insertString = [NSString stringWithFormat:

@"var script = document.createElement('script');"

"script.type = 'text/javascript';"

"script.text = \"function jsFunc() { "

"var a=document.getElementsByTagName('body')[0];"

                              "alert('%@');"

                              "}\";"

"document.getElementsByTagName('head')[0].appendChild(script);", self.someString];

    NSLog(@"insert string %@",insertString);

    [self.myWeb stringByEvaluatingJavaScriptFromString:insertString];//插入js

    [self.myWeb  stringByEvaluatingJavaScriptFromString:@"jsFunc();"];//執行js函式


//var 定義一個變數

js語句主要介紹

document:屬性

    document.title //設定文件標題等價於HTML

    document.bgColor //設定頁面背景色

    document.fgColor //設定前景色(文字顏色)

    document.linkColor //未點選過的連結顏色

    document.alinkColor //啟用連結(焦點在此連結上)的顏色

    document.vlinkColor //已點選過的連結顏色

    document.URL //設定URL屬性從而在同一視窗開啟另一網頁

    document.fileCreatedDate //檔案建立日期,只讀屬性

    document.fileModifiedDate //檔案修改日期,只讀屬性

    document.fileSize //檔案大小,只讀屬性

    document.cookie //設定和讀出cookie

    document.charset //設定字符集簡體中文:gb2312

document:方法

    document.write() //動態向頁面寫入內容

    document_createElement_x_x_x(Tag) //建立一個html標籤物件

    document.getElementByIdx_xx_x_x(ID) //獲得指定ID值的物件

    document.getElementsByName(Name) //獲得指定Name值的物件

    document.body.a(oTag)

body:子物件

    document.body //指定文件主體的開始和結束等價於

    document.body.bgColor //設定或獲取物件後面的背景顏色

    document.body.link //未點選過的連結顏色

    document.body.alink //啟用連結(焦點在此連結上)的顏色

    document.body.vlink //已點選過的連結顏色

    document.body.text //文字色

    document.body.innerText //設定之間的文字

    document.body.innerHTML //設定之間的HTML程式碼

    document.body.topMargin //頁面上邊距

    document.body.leftMargin //頁面左邊距

    document.body.rightMargin //頁面右邊距

    document.body.bottomMargin //頁面下邊距

    document.body.background //背景圖片

    document.body.a(oTag) //動態生成一個HTML物件

location:子物件

    document.location.hash // #號後的部分

    document.location.host // 域名+埠號

    document.location.hostname // 域名

    document.location.href // 完整URL

    document.location.pathname // 目錄部分

    document.location.port // 埠號

    document.location.protocol // 網路協議(http:)

    document.location.search // ?號後的部分

常用物件事件:

    documeny.location.reload() //重新整理網頁

    document.location.reload(URL) //開啟新的網頁

    document.location.assign(URL) //開啟新的網頁

    document.location.replace(URL) //開啟新的網頁

    selection-選區子物件

    document.selection


參考來源:http://blog.sina.com.cn/s/blog_a7c44c880101dmvj.html