undeclared type support previous example broken before ios wkwebview

ios - type - WKWebView equivalente para las escalas de UIWebViewPageToFit



wkwebview before ios 11.0(nscoding support was broken in previous versions) (6)

Estoy actualizando mi aplicación iOS para reemplazar UIWebView con WKWebView . Sin embargo, no entiendo cómo lograr el mismo comportamiento con WKWebView . Con UIWebView usé scalesPageToFit para asegurar que la página web se mostrara con el mismo tamaño que el tamaño de la pantalla (para que aparezca la pantalla completa sin desplazarse).

Encontré esa solución en la web, sin embargo, no funciona:

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation { NSString *javascript = @"var meta = document.createElement(''meta'');meta.setAttribute(''name'', ''viewport'');meta.setAttribute(''content'', ''width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no'');document.getElementsByTagName(''head'')[0].appendChild(meta);"; [webView evaluateJavaScript:javascript completionHandler:nil]; }


Agregar metaetiquetas o cambiar el código de script Java no funcionó para mí. Luego cambié el marco para que funcionara bien, mi vista web estaba alineada y se ajustaba a la pantalla después de escribir el siguiente código (Swift):

var screenWidth: CGFloat { return UIScreen.main.bounds.size.width } var screenHeight: CGFloat { return UIScreen.main.bounds.size.height } yourWebView = WKWebView(frame: CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight), configuration: WKWebViewConfiguration()) yourWebView.navigationDelegate = self yourContainerView.addSubview(yourWebView)


Eco de la respuesta de nferocious76, en código swift: versión Swift2.x

let jscript = "var meta = document.createElement(''meta''); meta.setAttribute(''name'', ''viewport''); meta.setAttribute(''content'', ''width=device-width''); document.getElementsByTagName(''head'')[0].appendChild(meta);" let userScript = WKUserScript(source: jscript, injectionTime: WKUserScriptInjectionTime.AtDocumentEnd, forMainFrameOnly: true) let wkUController = WKUserContentController() wkUController.addUserScript(userScript) let wkWebConfig = WKWebViewConfiguration() wkWebConfig.userContentController = wkUController let youWebView = WKWebView(frame: CGRectZero, configuration: wkWebConfig)

versión swift3

let jscript = "var meta = document.createElement(''meta''); meta.setAttribute(''name'', ''viewport''); meta.setAttribute(''content'', ''width=device-width''); document.getElementsByTagName(''head'')[0].appendChild(meta);" let userScript = WKUserScript(source: jscript, injectionTime: .atDocumentEnd, forMainFrameOnly: true) let wkUController = WKUserContentController() wkUController.addUserScript(userScript) let wkWebConfig = WKWebViewConfiguration() wkWebConfig.userContentController = wkUController let yourWebView = WKWebView(frame: self.view.bounds, configuration: wkWebConfig)


Me di cuenta debajo de soultion. Para hacer que el contenido se ajuste al tamaño del dispositivo.

func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) { for making the content to fit with the device size let jscript = "var meta = document.createElement(''meta''); meta.setAttribute(''name'', ''viewport''); meta.setAttribute(''content'', ''width=device-width''); document.getElementsByTagName(''head'')[0].appendChild(meta);" webView.evaluateJavaScript(jscript) }


Similar a @ nferocious76''s pero en lenguaje Swift

var scriptContent = "var meta = document.createElement(''meta'');" scriptContent += "meta.name=''viewport'';" scriptContent += "meta.content=''width=device-width'';" scriptContent += "document.getElementsByTagName(''head'')[0].appendChild(meta);" webView.evaluateJavaScript(scriptContent, completionHandler: nil)


También puede probar el WKUserScript.

Aquí está mi configuración de trabajo:

NSString *jScript = @"var meta = document.createElement(''meta''); meta.setAttribute(''name'', ''viewport''); meta.setAttribute(''content'', ''width=device-width''); document.getElementsByTagName(''head'')[0].appendChild(meta);"; WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; WKUserContentController *wkUController = [[WKUserContentController alloc] init]; [wkUController addUserScript:wkUScript]; WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init]; wkWebConfig.userContentController = wkUController; wkWebV = [[WKWebView alloc] initWithFrame:self.view.frame configuration:wkWebConfig];

puede agregar configuración adicional a su WKWebViewConfiguration.


Versión C #, para usar en el Renderizador personalizado de Xamarin:

string jScript = @"var meta = document.createElement(''meta''); meta.setAttribute(''name'', ''viewport''); meta.setAttribute(''content'', ''width=device-width''); document.getElementsByTagName(''head'')[0].appendChild(meta);"; WKUserScript wkUScript = new WKUserScript((NSString)jScript, WKUserScriptInjectionTime.AtDocumentEnd, true); WKUserContentController wkUController = new WKUserContentController(); wkUController.AddUserScript(wkUScript); WKWebViewConfiguration wkWebConfig = new WKWebViewConfiguration(); wkWebConfig.UserContentController = wkUController; WKWebView webView=new WKWebView(Frame, wkWebConfig);