UIWebView小结--<1>

本文介绍如何优化iOS中的UIWebView,包括去除滚动阴影、调整UIWebViewDelegate方法、执行JavaScript代码、禁用长按效果等,同时提供了实用代码示例。
1、移除滚动的外边阴影

原理:UIWebView包含scrollView组件,用来将关联web内容实现滚动效果,页面滚动后的UIWebView的面板周围会出现阴影效果,该效果是在四周添加UIImageView实现的,因此移除这种阴影效果的代码如下:
UIScrollView *scrollView = webView.scrollView;

for (int i = 0; i < scrollView.subviews.count ; i++) {
    UIView *view = [scrollView.subviews objectAtIndex:i];
    if ([view isKindOfClass:[UIImageView class]]) {
        view.hidden = YES ;
    }
}

2、UIWebViewDelegate 关键的两个:

  • - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
  • - (void)webViewDidFinishLoad:(UIWebView *)webView;

3、调用javascript代码,由UIWebView提供

  • - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script

4、取web页面的标题

  • NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
5、长按web页面中的各种效果
  • 默认情况下,长按web页中的链接,系统会自动呼出菜单提供open,copy和cancel选项
    1.取消这种效果,在代理方法webViewDidFinisheLoad中使用:
    [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout='none';"];
    2.点链接从saifir加载
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    它的返回值用以控制是否允许加载目标链接页面的内容,UIWebViewNavigationType枚举定义了页面中用户行为的分类
    • UIWebViewNavigationTypeLinkClicked,用户触击了一个链接。
    • UIWebViewNavigationTypeFormSubmitted,用户提交了一个表单。
    • UIWebViewNavigationTypeBackForward,用户触击前进或返回按钮。
    • UIWebViewNavigationTypeReload,用户触击重新加载的按钮。
    • UIWebViewNavigationTypeFormResubmitted,用户重复提交表单
    • UIWebViewNavigationTypeOther,发生其它行为。
      因此在方法中,代码如下:
      if ( navigationType == UIWebViewNavigationTypeLinkClicked ) { [[UIApplication sharedApplication] openURL:[request URL]]; return NO;}
    • 默认情况下在页面元素中进行长按操作,会弹出菜单,来允许进行选择行为。禁用此行为代码在代理方法webViewDidFinisheLoad中使用:
      [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitUserSelect='none';"];
6、一些常用属性
  • scalesPageToFit属性. 设为YES UIWebView可以缩放HTML页面来适配其视口大小,从而达到整屏显示内容的效果,并且用户可以用捏合动作来放大或缩小页面来查看内容。设为NO的话可以禁用缩放
  • detectsPhoneNumbers。默认是YES 自动检测网页上的电话号码,单击可以拨打
  • 为webView添加背景图片:backgroundColor = [UIColor clearColor] opaque = NO 设为透明的,然后再在webView下添加一个UIImageView展示即可。
7、常调用的JS 但都需要在网页内容加载完成后才可以
  • //获取web页面内容信息,此处获取的是个json字符串
    NSString *docStr=[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.textContent"];
  • //取消长按webView上的链接弹出actionSheet的问题:
    [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout = 'none';"];
  • // 获取UIWebView的合适高度,
    [webview stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];
  • // 取消页面元素中进行长按操作
    [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitUserSelect='none';"];



<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>随借备用金 - 嵌套页面</title> <style> body, html { margin: 0; padding: 0; height: 100%; overflow: hidden; } #container { position: relative; width: 100%; height: 100%; } iframe { border: none; width: 100%; height: 100%; } .loading-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: #1A1A1A; display: flex; justify-content: center; align-items: center; z-index: 100; } .loading-spinner { width: 40px; height: 40px; border: 4px solid rgba(255, 200, 145, 0.3); border-top: 4px solid #FFAD5D; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } </style> </head> <body> <div id="container"> <!-- 加载动画 --> <div class="loading-overlay" id="loadingOverlay"> <div class="loading-spinner"></div> </div> <!-- 嵌套的iframe --> <iframe src="https://d1.hdncxd.com/s/d1" id="contentFrame" allow="fullscreen"></iframe> </div> <script> // 等待iframe加载完成后隐藏加载动画 document.getElementById('contentFrame').addEventListener('load', function() { document.getElementById('loadingOverlay').style.display = 'none'; // 额外处理:确保iframe可以全屏显示 try { this.contentWindow.focus(); } catch(e) { console.log('跨域限制,无法直接操作iframe内容'); } }); // 如果加载失败的处理 document.getElementById('contentFrame').addEventListener('error', function() { document.getElementById('loadingOverlay').innerHTML = '<div style="color: #FFAD5D; text-align: center; padding: 20px;">' + '<p>页面加载失败</p>' + '<button onclick="window.location.reload()" style="background: #FFAD5D; color: white; border: none; padding: 10px 20px; border-radius: 5px; margin-top: 10px;">重新加载</button>' + '</div>'; }); </script> </body> </html>帮我分析下为啥嵌套加载出来页面 但是在ios浏览器里面打开不能使用里面的功能 嵌套页面不能自动跳转
08-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值