2014-10-10 3 views
39

Ich aktualisiere meine iOS App, um UIWebView durch WKWebView zu ersetzen. Jedoch verstehe ich nicht, wie man das gleiche Verhalten mit WKWebView erreicht. Mit UIWebView habe ich scalesPageToFit verwendet, um sicherzustellen, dass die Webpag mit der gleichen Größe wie die Bildschirmgröße angezeigt wurde (um den Vollbildmodus ohne Scrollen anzuzeigen).WKWebView entspricht für UIWebView's scalesPageToFit

fand ich diese Lösung auf dem Netz arbeiten, um es sich jedoch nicht:

- (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]; 
} 
+0

versuchen Sie dies: 'NSString * js = @" var meta = document.createElement ('meta'); " " meta.setAttribute ('Name', 'Ansichtsfenster'); " " meta.setAttribute ('content', 'width = device-width'); " "document.getElementsByTagName ('head') [0] .appendChild (meta)"; [webView stringByEvaluatingJavaScriptFromString: js];.' Code mit obigem Code ersetzt – z22

+0

gab ich es versuchen, aber ich habe die gleiche Ergebnis (übrigens ist die Methode stringByEvaluatingJavaScriptFromString in WKWebView nicht vorhanden, also habe ich mein evaluateJavaScript: completionHandler call – olinsha

+0

haben Sie eine Lösung? – anoop4real

Antwort

81

Sie auch die WKUserScript versuchen.

hier ist mein Arbeits config:

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]; 

können Sie zusätzliche Konfiguration zu Ihrer WKWebViewConfiguration hinzuzufügen.

+2

Funktioniert wie ein Charme. Thanks –

+1

Funktioniert gut für mich - nur kleinere Änderungen WKUserScriptInjectionTimeAtDocumentEnd zu WKUserScriptInjectionTimeAtDocumentStart geändert – sckor

+0

Dies sollte die akzeptierte Antwort sein – Brams

7

Ähnlich @ nferocious76 der aber in Swift Sprache

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) 
+0

Danke! Dies löste auch mein Problem, um HTML-Schriftgröße größer zu machen, nicht von klein bis groß zu aktualisieren. Ich verwende das, um die Inhaltsschriftgröße und das innere Layout zu "aktualisieren". –

16

Echo der Antwort des nferocious76, in SWIFT-Code: Swift2.x Version

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) 

swift3 Version

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) 
2

C# Version, zur Verwendung in Xamarin Custom Renderer:

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);