JS 和IOS交互

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值的对象




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



1. 获取HTML所有内容

html:NSString *lJs = @"document.documentElement.innerHTML";

打印head的内容:
NSString *content = [webView stringByEvaluatingJavaScriptFromString:@"document.head.innerHTML"];
 打印body的内容:
NSString *content = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
获取页面title:
NSString *title = [webview stringByEvaluatingJavaScriptFromString:@"document.title"];

2. 设置页面的初始缩放比例

    NSString *meta = [NSString stringWithFormat:@"document.getElementsByName('viewport')[0].content = 'minimum-scale=0.5; maximum-scale=5; initial-scale=0.5;'"];
    [webView stringByEvaluatingJavaScriptFromString:meta];
这里只有当 [webView setScalesPageToFit:YES];时才能支持用户手势缩放view。但是,我在iOS 6.0及7.1上发现minimum-scale会因设置了fit而保持在最小fit状态,无法缩放到0.5,但初始化时是0.5。

3. 缩放页面内容的方法:

在[webView setScalesPageToFit:NO];的前提下,执行:
[webView stringByEvaluatingJavaScriptFromString:@"document.body.style.zoom = 5.0;"];

4. 修改界面元素的值:

NSString *js_result = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByName('q')[0].value='AISeminar.cn';"];

5. 表单提交:
NSString *js_result2 = [webView stringByEvaluatingJavaScriptFromString:@"document.forms[0].submit(); "];

6. 插入javascript

[webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');" 
"script.type = 'text/javascript';" 
"script.text = \"function myFunction() { " 
"var field = document.getElementsByName('q')[0];" 
"field.value='朱祁林';" 
"document.forms[0].submit();" 
"}\";" 
"document.getElementsByTagName('head')[0].appendChild(script);"]; 
[webView stringByEvaluatingJavaScriptFromString:@"myFunction();"];

7. 修改某个标签的属性:
如原值为:
<html><head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> 
修改服务器页面的meta的值方法为:
    NSString *meta = [NSString stringWithFormat:@"document.getElementsByName('viewport')[0].content = 'width=%f, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no'", webView.frame.size.width];  
    [webView stringByEvaluatingJavaScriptFromString:meta]; 

8.  给网页增加css样式  
    [webView stringByEvaluatingJavaScriptFromString:   @"var tagHead =document.documentElement.firstChild;"  
     "var tagStyle = document.createElement(\"style\");"   
     "tagStyle.setAttribute(\"type\", \"text/css\");"   
     "tagStyle.appendChild(document.createTextNode(\"BODY{padding: 20pt 15pt}\"));"  
     "var tagHeadAdd = tagHead.appendChild(tagStyle);"]; 

我项目中的例子:

HTML
<p>  因此招商轮船、*ST长油以及中海发展这三家航企的油运业务也惨不忍睹。招商轮船和*ST长油的净利润分别巨亏21.84亿元和59.22亿元,在净利润榜单中的排名分别降至倒数第6(67位)和倒数第二(71位)。*ST长油还因为连续4年亏损已经进入退市程序。</p>
<p style="text-align: center; "><img width="448" height="212" alt="" src="/ghapp/uploads/2014/07/26/a02c3507e16042c5a4b97b2d09cb0265.jpg" /></p>
<p>&nbsp;</p>
<p> <strong> 船舶企业排名回升</strong></p>
<p style="text-align: center; "><img width="448" height="211" alt="" src="/ghapp/uploads/2014/07/26/a02c3507e16042c5a4b97b2d09cb0265.jpg" /></p>
<p>&nbsp;</p>
<p><strong>  海工企业依旧坚挺</strong></p>
<p>  尽管订单活跃,但业内人士表示,中国海工装备产业离实现&ldquo;质变&rdquo;尚有距离,海工企业获得的仅是微利。与此同时,因造船产能过剩和部分企业盲目加 入导致无序竞争,使得企业盈利空间相对有限。据统计,目前中国仅具备自升式钻井平台建造能力的企业就多达14家,明显多于韩国和新加坡,产业集中度不高的 弊端正在显现。有业内人士表示:&ldquo;中国的接单能力确实超过新加坡,但海工装备制造的低端化趋势没有得到有效遏制,未来我们的市场份额或许能够维持,但是接 单量将会有所下滑,对于前景只能持谨慎乐观。&rdquo;</p>
<p style="text-align: center; "><img width="448" height="211" alt="" src="/ghapp/uploads/2014/07/26/a02c3507e16042c5a4b97b2d09cb0265.jpg" /></p>
<p>  <strong>港口企业业绩分化</strong></p>
<p>  港口企业去年的表现较为平稳,业绩增速普遍&ldquo;滞涨&rdquo;,但也有部分企业维持高速增长。</p>
<p>  据《创富榜》统计,27家港口上市企业去年共实现营业收入1761亿元,同比上升15.9%;净利润255.96亿元,同比上升19%,贡献了净利润榜单中的绝大部分利润。



注意:上面是后天给我的HTML,里面的图片地址只给了后半部分,前半部分需要我们前段进行拼接,前半部分都是相同的;

一开始我通过JS去抓取里面的图片链接用的方法是:var lianjie = objs[i].src ,但是这样取出来的链接如果是相对路径或者是链接不是http://开头的,取出来系统会自动在前面添加一部分代码;后来换一个方法就不会了:var lianjie = objs[i].getAttribute('src'),设置链接的时候也换成这个方法objs[i].setAttribute('src',"newlink")


-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString *str =[NSString stringWithFormat:
                    @"var script = document.createElement('script');"
                    "script.type = 'text/javascript';"
                    "script.text = \"function myFunction() { "
                        "var objs = document.getElementsByTagName('img');"
                        "for(var i=0;i<objs.length;i++) {"
                            "var oldSrc = objs[i].getAttribute('src');"
                            "alert(oldSrc);"
                            "var indNum = oldSrc.indexOf('http://');"
                            "if(indNum >= 0) {"
                                "alert(indNum);"
                                "alert(oldSrc);"
                            "} else {"
                                "var newSrc = '%@'+oldSrc;"
                                "objs[i].setAttribute('src',newSrc);"
                            "}"
                        "}"
                    "}\";"
                    "document.getElementsByTagName('head')[0].appendChild(script);",
                    industryInfo_bodyImage_head];
    
    NSString *dtr1 = [detailWbView stringByEvaluatingJavaScriptFromString:str];
    
    NSLog(@"==:%@",dtr1);
    //开始调用自定义的javascript
    [detailWbView stringByEvaluatingJavaScriptFromString:@"myFunction();"];
    
    
//    NSString *jsToGetHTMLSource = @"document.getElementsByTagName('html')[0].innerHTML";
//    NSString *HTMLSource = [detailWbView stringByEvaluatingJavaScriptFromString:jsToGetHTMLSource];
//    NSLog(@"%@",HTMLSource);
    
    [activityIndicatorView stopAnimating];
//    [self addImageClickListner];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值