Tag: wkwebview

Coisas简单:Abrindo url dentro do app iOS c / Swift

不存在的事实,存在的主体,“简单的”和“犯罪行为”。 Mesmo com toda afrustaçãoedecepçãoqueurge com qualquer coisa que seja que tenha virado o mais puro caos,eu aprendi aproveitar and canalizar essamotivaçãopara algo e eis que vem o post de hoje。 Vamosentãopegar是一个法式面包,也可以像巧克力或巧克力那样用碗装。 简单的平面图: Carregar um网站usando HTTP,无HTTP O app deve funcionar em 8.3+ 问题: WKWebView可以替代UIWebView,可以在8.0 MAS上通过接口构建器自定义视图,或者通过11.0版的常规更新来替代视图。 错误:类不可用:iOS 11.0之前的WKWebView(以前版本中的NSCoding支持被破坏) 2.在iOS 9.0上使用HTTP的一部分,请使用NSAppTransportSecurity com禁止任何致命负载。 Mãosnocódigo Crie um projeto qualquer,pode […]

WKWebView。 我的经验

从iOS 8开始,我们(iOS开发人员)使用WKWebView替代UIWebView。 即使看起来非常简单(加载HTML并在特殊视图中呈现),webViews在使用它们时也会遇到问题。 在本文中,我想分享一些有关在iOS项目中使用WebView的想法。 问题 乍一看,webView应该不难。 如渲染一些HTML或通过URL加载网页。 但是在iOS中使用WKWebView可能很容易成为一项艰巨的任务。 我试图将我的经验分为四个部分: Cookie管理 终止内容过程 记忆问题 信息清单🙂 饼干 加载页面时,将在webView中加载URLRequest的实例。 WebView通过它的ProcessPool处理它的cookie,您不需要中断它的工作。 要通过WKWebView接收HTTP标头和cookie(cookie是HTTP标头之一),您应该实现WKNavigationDelegate方法 如果您想在特定时间检查webViews cookie,则可以通过Safari Web Inspector(首先在iPhone设置中启用JavaScript调试)进行检查。 HTTPCookieStorage通常与Safari不同步。 如前所述,cookie,缓存和所有此类资源均由webView的WKProcessPool实例处理。 如果您需要在不同的webView之间共享cookie,而不是在其配置中共享相同的进程池。 如果您确实需要注入自己的cookie,则分两个步骤进行。 创建URLRequest实例时,在相应的标题字段中设置Cookie 加载了WKUserScript的页面后,使用javascript“注入”您的cookie 这就是具有这种逻辑的UIViewController的方式 在处理重定向和更改cookie时要小心。 在重定向期间,webView使用其内部cookie状态,而不是您在第一次加载时通过的状态。 例如: 您在URLRequest中设置自定义cookie,然后将其加载到webView中。 WebView接收代码30x(重定向),服务器通过标头设置其cookie。 WebView根据其内部状态构建新的URLRequest。 您的Cookie可能丢失了。 与查尔斯检查 最后,关于cookie,我建议您将cookie逻辑留给webView,如果您需要服务器跟踪应用程序的请求,则可以通过设置自定义用户代理来实现。 通过设置 通过UserDefaults iOS可以确保您每个HTTP请求都具有该用户代理。 终止内容过程 其基础Web内容处理已终止的Web视图。 对您的用户意味着什么? 意思是“死亡白屏”。 您的用户看不到任何内容。 触发“重新加载”方法无效。 WebViews属性URL设置为nil。 您应该跟踪此事件,并尝试恢复您的webView,加载最后一个已知的URL或重新创建webView。 当您使用困难的JS加载页面或上传大量媒体(例如高分辨率图片)时,可能会出现此事件。 记忆问题 WKWebView API并不完美。 如果您使用webView构建复杂的内容,请检查是否存在内存泄漏。 例如,如果要跟踪监听JS代码,则需要将WKScriptMessageHandler添加到WKUserContentController中: 但是内容控制器对他的脚本消息处理程序拥有很强的引用。 […]

Swift + JS

从屏幕截图中可以看到,电子邮件字段的ID为“ login_field”。 我们将使用ID来访问元素。 WKWebView有一个validateJavaScript方法,该方法使我们可以访问网页元素和方法。 此时,我们要做的就是调用该登录按钮方法。 与字段不同,登录按钮没有ID。 相反,它具有名称参数。

确定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规则: […]

如何在Swift中启用WKWebView的位置服务?

我的浏览器应用程序使用WKWebView,但是当我尝试访问需要使用定位服务的网站(例如Google Maps)时,它不起作用。 我已经寻找了解决这个问题的方法,并且遇到了这个问题 。 我试图将问题的答案中的string添加到我的Info.plist,但它不能解决问题。 我怎样才能解决这个问题? 谢谢, PastaCoder

如何捕获WKWebview的完整页面截图?

我可以通过调整UIWebView的UIScrollView框架来捕捉UIWebView的所有内容截图。 但是,我无法通过相同的方法捕获WKWebView的所有内容截图。 我用于捕获UIWebView方法如下: webview.scrollView备份框架和webview.scrollView视图 创build一个新的容器视图为webview.scrollView视图 调整新的容器视图和webview.scrollView 。 框架与webview.scrollView.contentSize相同 通过renderInContext或drawViewHierarchyInRect绘制 但是,这种方法将捕获WKWebview的白色屏幕截图。 它不工作! 我已经打印所有级别的WKWebView ,然后我发现一个UIView (WKContentView)的大小和contentView是一样的,你可以通过这个级别find这个视图: WKWebView WKScrollView WKContentView(大小与contentView相同) 我也试图捕获WKContentView ,然后我发现只有可见的视图可以被捕获。 无论如何,任何人都可以告诉我如何捕获WKWebView的整页内容截图?

WKwebview:无法在应用程序Web视图iOS swift中查看应用程序文档图像

我试图从应用程序文件目录中加载图像(图像下载在应用程序)在wkwebview。 wkwebiview或任何权限问题是否有任何限制? 例如图片url: 文件:///private/var/mobile/Containers/Data/Application/34EDAFAD-F0CD-4A63-8B2E-74BB370C71DF/Documents/00286863-49ED-4C4D-8E36-106098DA5D72.jpeg 谁能帮我吗?

使用UIWebView共享WKWebView Cookie

我试图与UIWebView分享WKWebViewcookies获取所有的Cookie。 我知道从UIWebView获取所有的cookie比较简单,比较WKWebView。 我在选项卡式应用程序模板中创build了两个WebView(WKWebView,UIWebView)。 下面的方法,我用于与UIWebView共享WKWebViewcookies,但没有得到成功。 func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) { let response = navigationResponse.response as? HTTPURLResponse let cookies = HTTPCookie.cookies(withResponseHeaderFields: response?.allHeaderFields as! [String : String], for: (response?.url)!) HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always for cookie in cookies { HTTPCookieStorage.shared.setCookie(cookie) } decisionHandler(WKNavigationResponsePolicy.allow); } 使用上面的代码,当我login到我的帐户从WKWebView,UiWe​​bView没有login我已经。 我也试图与WKWebView共享UIWebViewcookies,它的工作。 请谁能告诉我如何可以与UIWebView共享WKWebView Cookie或如何从WKWebView中获取所有的cookie? 谢谢

简单的Webview:navigationDelegate开始崩溃

我的WebView有一个小问题。 这是我在我的应用程序中所做的: import UIKit import WebKit class ViewController: UIViewController, WKNavigationDelegate { @IBOutlet var webView: WKWebView! // draged from storyboard override func viewDidLoad() { super.viewDidLoad() var urlToLoad : (String) urlToLoad = "http://wwww.myapp.com" webView.sizeToFit() webView.isUserInteractionEnabled = true let url = URL(string: urlToLoad) let request = URLRequest(url:url!) //webView.navigationDelegate = self webView.load(request) } 正如你看到的行“webView.navigationDelegate = self”被评论。 如果我取消注释,我的应用程序将在开始时崩溃并告诉我: debugging器 :libc […]

有没有办法在WKWebView中设置本地存储

我想设置本地存储之前向WKWebView请求是可能的任何iOS版本? 找不到方法做,唯一相关的类是WKWebsiteDataStore https://developer.apple.com/documentation/webkit/wkwebsitedatastore ,只有方法可以读取和删除。