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
NSString *user = @"document.getElementById('qq_userid').innerHTML";
NSString *pwd = @"document.getElementById('qq_password').innerHTML";
NSString *str = [NSString
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