Tag: webview

[iOS] WKWebView(而不是UIWebView)

在UIWebView中进行浏览。 심지어로자바스크립트파사파리에다리다。 WWDC 2014将使用WKWebView,AppKit,WebView,UIKit,UIWebView,API和Webview。 60fps스크롤링,빌트인-제스처,App-WebPage커뮤니케이션을제공한다。 UIWebView和WKWebView和2位用户。 在UIWebView和UIKit中,导入import필요하다。 그래서接口构建器사용할있다。 W다음,WKWebView javascriptjavascript최적화를로프스세다。 Web UIWebView보다빠르고이다。 iOS,iOS 8에서本地文件을로드하는데,가가지고다。 iOS 9에서정된사항이다。 아래의에서이점은아래의URL에서능하가능하다。 WKWebKit框架 WKBackForwardList —图库照片 WKBackFowardListItem —后退리스트에페이지 WKFrameInfo —在frameframe中添加정보를 WKNavigation —웹이지로딩을정를정보를포함 WKNavigationAction —动作导航유발하는动作정를 WKNavigationRespoonse —导航 WK首选项—웹뷰의정설 WKProcessPool —池中的池 WKUserController —用户脚本的用户指南 WKScriptMessage — K이지로보낼지의정보를 WKUserScript —크립트스지크립트스크립트 WKWebViewConfiguration —属性列表集合 WKWindowFeatures —图库照片 通讯协定 WKNavigationDelegate —主/副框架加载정책과主机导航과정을메소드를공공 WKScriptMessageHandler —웹페스에스크립트지를제메소드 WKUIDelegate —在本机UI中进行操作 Javascript —本机通信 讯息处理常式 Web消息处理程序。 […]

iOS 11中的自定义方案处理和WKWebview

Apple希望每个人在将其作为iOS 8 SDK的一部分发布时,从完美的UIWebview迁移到新的WKWebView 。 甚至有一个“美丽”的警告消息,并且已经存在了四年了……嗯,你知道吗? 大多数应用程序仍使用UIWebView ,因为它易于使用和完成工作。 但是,您确实应该迁移到WKWebView ,因为它由WebKit框架直接支持,它具有更多功能,并且使用了更快的JavaScript引擎。 在Glose图书中,作为读者的一部分,我们广泛使用UIWebView ,即使它是非常自定义的,也融合了本机和Web交互以及UI。 是的,新的Javascript桥(称为WKScriptMessageHandler )是WKWebView最精彩的东西之一。 书籍的核心内容仍为HTML格式。 因此,使用浏览器视图(UIWebView或其他任何视图)来显示它是有意义的。 在我们应用程序的当前版本中,我们的阅读器仍在UIWebview上运行(可耻,可耻,可耻),因为当时它是唯一可用的解决方案。 在开发版本中,我们制作了一个全新的移动阅读器,这次它基于WKWebView 。 为什么花了我们这么长时间? 因为直到iOS 11 SDK都没有办法使用WKWebView来处理自定义url方案加载。 使用WKWebView仍然有很多优点,但是自定义方案加载是一个总的障碍 。 UIWebView支持自定义NSURLProtocol ,这意味着为了提供一种自定义方式来加载自定义url方案,您只需创建NSURLProtocol的子类,然后向NSURLProtocol注册您的类。 然后,任何调用您的自定义方案的东西(例如helloworld://)都会调用您的自定义NSURLProtocol类。 然后,您负责加载和转发您的内容。 这是非常强大的功能,在我们的案例中,我们使用它来加载书籍中的各种资产,例如图像,视频等。 我们可以使用很多变通方法,但是它们大多是黑客,对于生产应用程序来说并不好。 WKWebview不支持自定义NSURLProtocol ,因此您可以注册所需的任何类,由于WKWebView请求,它永远不会被调用。 好吧! 苹果在iOS 11中添加了WKURLSchemeHandler 。 它的工作原理与NSURLProtocol几乎相同! 这是一些您可以理解的代码示例,因为老实说,您实际上并不关心上面所有的废话。 因此,首先创建WKURLSchemeHandler子类,必须实现start和stop这两个方法。 只有start方法才有意义,因为这是您要做的工作。 stop方法可以保留为空,或用于您进行任何必要的清理。 您可以访问完整的请求,因此您可以检查,从url中提取任何内容,加载所需的数据并将其转发到WKWebView 。 然后,您的内容应加载。 在创建类之后,您必须在WKWebView中注册它,并且在创建其配置时必须这样做: 一切就绪,现在您可以在WKWebView中加载任何自定义内容了!

在iOS 11中的Files App中下载文件

构建一个将来自网络的文件保存到本地存储的iOS应用程序可能很棘手。 经过一周的反复试验,我弄清楚了。 所以这是解决方案。 准备好保存文件或在“文件应用程序”中创建目录之前。 我们需要在应用程序的info.plist中获得一些权限。 启用文件共享-添加UIFileSharingEnables,此键(应用程序支持iTunes文件共享)将使iTunes共享“文档”文件夹中的文件。 确保将布尔值设置为YES。 声明此内容后,/ Documents目录的内容可用于用户根据需要从iTunes移入或移出该目录。 就地打开支持-添加LSSupportsOpeningDocumentsInPlace,此密钥(支持就地打开文档)将提供对应用程序文件提供者的访问,以读取或写入“文档”文件夹中的文件。 确保如上所述将布尔值设置为YES。 现在,让我们使用一些代码。 让我们在“文档”文件夹中创建一个目录,该目录将存储在设备中。 我创建了一个名为Chemdoc的应用程序,并在Chemdoc文件夹中创建了一个目录(Chemdoc SDS)。 在上面的代码中,我在/ Documents / Chemdoc SDS中创建了一个目录。 我已经打印了Documents Directory文件夹路径,以便在模拟器上工作时可以跟踪该路径。 您将在“文件”应用程序的“在我的iPad / iPhone上”部分中看到正在创建的应用程序文件夹目录。 您可以看到我们现在已经成功创建了一个子目录,并且现在我们可以通过访问子目录的路径将文件添加到该子目录中。 有很多方法可以从Web下载文件,但是我们仅使用扩展名,该扩展名以url和目标路径作为参数。 上面的扩展名将下载任何文件并存储在给定的目标位置。 在这里,我们的目的地将是Chemdoc SDS的目录。 运行上面的代码后,我们将看到文件已下载到/ Chemdoc SDS / Sample.pdf下的Files目录中。 删除档案 如果要从该位置删除文件,则只需知道文件的确切路径并使用以下代码即可。 我们可以通过访问文件路径并创建一个附加了导航控制器的子视图来在Web视图中查看“已下载的文件”,这样当我们从子视图中按回去时,我们将定向到该应用程序。 下面是带有应用程序后退箭头的“模拟Web视图”。 希望对您有所帮助。 使用下面的Clap欣赏博客。 以后再接你🙂

使用Angular在iPhone iOS 10上自动播放内联视频

从iOS 10开始,移动版(iPhone和iPad)上的Safari开始允许开发人员以内联方式自动播放视频,前提是您要播放的视频满足某些条件。 在此之前,您的视频不会自动内联播放,并且在播放时只能全屏播放。 进行这些更改是为了防止“具有声音自动播放功能的网站”,如果您曾经浏览过手机上的某个站点并且开始播放烦人的视频广告,则可能是由于内联视频自动播放功能引起的,但还有其他原因内联视频HTML属性的合法使用。 视频作为GIF动画 我们都同意,GIF很酷,但是在幕后它们却是巨大的对象,就性能而言,GIF绝对不是网络上的最佳格式。 GIF将比例缩放到几兆字节的情况并不罕见,具体取决于质量,帧速率和长度。 如果您想提高网站的加载性能并帮助用户减少数据使用量,那么动画GIF就是与该目标不兼容的。 解决此问题的一种方法是将这些巨大的文件转换为压缩的精益视频,这样既可以保持较高的分辨率,又可以为用户节省大量数据。 自动播放静音 简而言之,视频要在移动浏览器中内联播放,需要将以下关键属性添加到video标签中(取决于移动平台)。 自动播放 静音 内线 Chrome For Android仅需要前两个,但是如果您使用的是Safari,则需要添加iOS 10中引入的playsinline属性。跨浏览器兼容的代码如下所示: 在最新的浏览器和平台上,这将使您的视频内联自动播放,并具有loop属性,使您的视频实质上充当GIF。 它不起作用! 我在上一段的最后一句话中强调了大部分内容,因为您肯定会遇到无法使用的情况。 我的具体案例是运行自定义WebView渲染Angular应用的iOS 10和11 iPhone。 根据iOS autoplay技术指南中的规定,该应用程序中的视频标签会在用户与页面互动后立即尊重autoplay属性,但只会忽略playsinline属性并全屏播放视频。 最终,它需要花很多时间进行Google搜寻和反复试验,但如果遇到相同的错误,请检查以下内容以使其正常运行: 如果您要定位的是iOS 11,请确保设备未在低功耗模式下运行。如果您使用的是Android版Chrome浏览器,则数据保护程序模式也会阻止自动播放。 在您的WebView中,确保为WebView设置了allowsInlineMediaPlayback配置。 我用了: webView.configuration.allowsInlineMediaPlayback = true 如果 #available ( iOS 10.0,*){ webConfiguration.mediaTypesRequiringUserActionForPlayback = [] } 其他 { //早期版本的后备 webConfiguration.mediaPlaybackRequiresUserAction = false } 安装iPhone-Inline-Video:如果您想支持iOS的早期版本(8和/或9)甚至是iOS 10的嵌入式视频播放,正如我发现的那样,此库“在iOS 8和iOS上启用iOS 10的playsinline属性9(几乎是polyfill)”。 静音属性问题 […]

Swift 4中的Web视图

您是iOS开发(Swift)的新手吗? 您要实现Web View吗? 如果您的回答是“是”,那么本教程适合您。 所以开始做这个。 注意:UIWebView已从XCode 9开始弃用,因此,如果您还支持iOS 10或更低版本,则适合您。 如果您的应用仅支持iOS 11+设备,请不要使用WKWebView而不是UIWebView 。 您可以使用SFSafariViewController轻松获得相同的结果。 阅读如何使用SFSafariViewController 点击这里。 步骤1: 创建一个快速项目。 第2步: 在视图控制器中添加一个UIwebView 。 添加一个UIActivityIndi​​catorView。 或您的自定义加载程序。 并为UIwebView , UIActivityIndi​​catorView (或自定义加载程序)设置自动布局。 第三步: 将您的所有连接与View controller连接。 1. WebView连接 2.装载程序连接。 连接后,View Controller将如下所示。 见下文。 👇 步骤4: 现在,我们将继续进行编码部分。 1.导入WebKit。 2.导入类中的Delegate(UIWebViewDelegate) 3.添加代理。 (webView.delegate =自我) 所以你的班级看起来像这样 步骤5: 现在这一点很重要,因为您需要首先了解UIwebView有多少个委托方法。 UIWebViewDelegate有4种方法 ,但是只用三种方法 复制这3种方法并粘贴到您的View Controller中。 👇 步骤6: 现在是时候在视图控制器中添加代码和逻辑了。 因此,让我们继续前进。 见下文👇 现在在 […]

确定WKWebView的内容大小

本文最初发表在我的个人博客上。 我强烈建议在此处阅读该书,因为它可以更好地突出显示语法并提供阅读相关文章的建议。 在我最近的一个项目中,我不得不使用Web视图来显示带有本地CSS和自定义字体的HTML字符串。 Web视图必须与其他几个视图一起嵌入滚动视图中。 还必须将其高度调整为要显示的内容。 我的目标是创建以下内容: 我已经在以前的一个项目中做到了这一点,所以我想我会重用相同的代码。 问题在于代码使用的是UIWebView而不是较新的WKWebView 。 从iOS 8开始, UIWebView被功能更强大且结构更完善的WKWebView ,并且从iOS 12开始正式弃用UIWebView 。 这意味着我不得不重新实现该功能。 我已将所有代码放在GitHub上的示例项目中,以便您可以继续。 为了将HTML字符串加载到Web视图中, WKWebView具有loadHTMLString(_:baseURL:)方法。 我从后端获取的HTML字符串没有 , 和标记,因此我不得不手动添加它们。 加载HTML的方法如下所示: 重要笔记: 标签必须具有viewport元数据,这对于正确计算Web视图的内容高度非常重要。 baseURL中的baseURL参数必须是主要的捆绑包URL,因为我们将加载本地自定义字体。 在UIWebView本地CSS文件加载到HTML中非常容易。 您只需要在标记中添加 。 在WKWebView此过程有点复杂,因为它要求在HTML加载后注入CSS。 我们可以通过webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)的webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)方法来WKNavigationDelegate这WKNavigationDelegate : 首先,我们将style.css文件的内容加载到字符串变量中。 之后,我们使用JavaScript将标记注入Web视图的HTML。 这种方法的问题在于,Web视图将加载HTML并显示它,然后再应用CSS。 用户看不到该过渡,这是不好的。 幸运的是,有更好的方法。 我们可以使用WKUserScript来表示可以注入到网页中的脚本, WKUserContentController可以将脚本注入到Web视图中。 在WKWebView初始化期间,将在WKWebView内部使用这些对象: 使用这种方法,CSS将在HTML加载后立即加载,并且不会出现用户可以注意到的过渡。 要在Xcode中添加自定义字体,建议您遵循Apple的教程。 添加字体后,我们需要使用CSS将其加载到Web视图中。 要在CSS中使用自定义字体,我们需要使用@font-face CSS规则: […]

UIWebView不会在ios中显示内容

我一直在围绕一个需要与SplitViewController类似的GUI的小项目进行工作。 现在我所做的是,我有两个UIViewControllers即MasterViewController和DetailViewController作为ViewController的子视图添加代码显示在下面的ViewController.m – (void)viewDidLoad { UIScreen *screen = [UIScreen mainScreen]; CGRect fullScreenRect = screen.bounds; // always implicitly in Portrait orientation. width = fullScreenRect.size.width; height = fullScreenRect.size.height; detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; masterViewController = [[[MasterViewController alloc]initWithNibName:@"MasterViewController" bundle:nil] autorelease]; masterViewController.view.frame = CGRectMake(0, 0, 299, height); detailViewController.view.frame = CGRectMake(300, 0, width-300, height); [self.view addSubview:masterViewController.view]; [self.view addSubview:detailViewController.view]; } […]

IOS的UIWebView不工作?

我正在使用此代码在UIWebView加载一个URL。 白色屏幕只出现 – (void)viewDidLoad { [super viewDidLoad]; NSString *link = @"http://www.apple.com/"; NSURL *url = [[NSURL alloc] initWithString:link]; NSURLRequest *req = [[NSURLRequest alloc] initWithURL:url]; [webView loadRequest:req]; }

预加载webView不起作用 – 试图减less加载时间

我有一个webView的viewController我显示本地的HTML文件。 问题是,加载前需要几秒钟,因此我试图避免这个等待时间。 到目前为止,我认为最好的方法是:一旦我进入主页面,我将开始加载文件到webView,这样当我进入infoViewController与webView它已经加载。 这里是代码: //mainViewController.m: tempInfo = [[InfoViewController alloc]initWithNibName:@"InfoViewController" bundle:nil]; [tempInfo.webView123 loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"About" ofType:@"htm"]isDirectory:NO]]]; tempInfo.test =@"test"; 正如你所看到的,我也添加了一个testingvariables,当我进入infoViewController时,webView没有加载,但testingvariables改变了值。 这意味着它正在传递testingvariables的值,但不会将html文件加载到webView中。 任何想法?

这是一个Swift的错误? 在webView中打开一个文件

我开始通过这种新的语言工作,我喜欢很多…但它似乎是比我预期的buggier。 我在YouTube的一个简单的例子( https://www.youtube.com/watch?v=Rva9ylPHi2w )在根视图控制器中构build一个webView并加载一个网页。 这个例子适用于外部网页,但不是本地文件。 尝试打开本地文件时出现空白屏幕。 下面的代码是为ViewController.swift文件。 import UIKit class ViewController: UIViewController { @IBOutlet var WebView : UIWebView var URLPath = ""/files/test.html"" override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. loadAddressURL() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be […]