Я обновляю свое приложение для iOS, чтобы заменить его UIWebView
на WKWebView
. Однако я не понимаю, как добиться того же поведения с WKWebView
. С UIWebView
Я scalesPageToFit
обеспечить веб - вол был показан с тем же размером, что и размером экрана (так, чтобы появиться на весь экран без прокрутки).
Я нашел это решение в Интернете, но оно не работает:
- (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];
}
NSString* js = @"var meta = document.createElement('meta'); " "meta.setAttribute( 'name', 'viewport' ); " "meta.setAttribute( 'content', 'width = device-width' ); " "document.getElementsByTagName('head')[0].appendChild(meta)"; [webView stringByEvaluatingJavaScriptFromString: js];
замените свой код приведенным выше кодом.Ответы:
вы также можете попробовать WKUserScript.
вот мой рабочий конфиг:
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];
вы можете добавить дополнительную конфигурацию в свой WKWebViewConfiguration.
источник
WKUserScriptInjectionTimeAtDocumentEnd
на,WKUserScriptInjectionTimeAtDocumentStart
то у меня это не сработает. Он не добавляет этот сценарий. любая причина?var style = document.createElement('style');style.innerHTML = 'body { -webkit-text-size-adjust: none; }';document.getElementsByTagName('head')[0].appendChild(style);
Эхо ответа nferocious76 в быстром коде: версия 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)
версия 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)
источник
Подобно @ nferocious76, но на языке 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)
источник
Версия C # для использования в 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);
источник
WkWebViewRenderer
? ПотомуControl
что какSetNativeControl()
и неизвестны ...ViewRenderer<CustomWebView, WKWebView>
и использоватьOnElementChanged(ElementChangedEventArgs<CustomWebView> e)
.Я разобрался ниже соула. Чтобы контент соответствовал размеру устройства.
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) }
источник
Мне помогло добавление приведенного ниже кода в мой HTML-скрипт.
<meta name="viewport" content="width=device-width, shrink-to-fit=YES">
Он делает то же самое, что и scalePageToFit в UIWebView.
см .: Как установить масштаб увеличения WkWebview в iOS
источник
Решение Swift 5:
let javaScript = """ var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta); """ webView.evaluateJavaScript(javaScript)
источник
Эта работа для меня, я добавил два атрибута в мета:,
initial-scale=1.0, shrink-to-fit=yes
которые помогают подогнать текст с html, иметь большое изображение в html.let jscript = "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width, initial-scale=1.0, shrink-to-fit=yes'); 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 self.webView = WKWebView(frame: self.view.bounds, configuration: wkWebConfig)
источник
// 100% работает у меня
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) { //print(#function) let scriptFontSizeAdjustment = "var style = document.createElement('style');style.innerHTML = 'body { -webkit-text-size-adjust: none; }';document.getElementsByTagName('head')[0].appendChild(style);" let scriptImgSizeAdjustment = "var style = document.createElement('style');style.innerHTML = 'img { display: inline;height: auto;max-width: 100%; }';document.getElementsByTagName('head')[0].appendChild(style);" webKitView.evaluateJavaScript(scriptFontSizeAdjustment) webKitView.evaluateJavaScript(scriptImgSizeAdjustment) }
источник
Ни один из этих ответов не работал у меня. Я пытался открыть URL-адрес Amazon для определенного исполнителя. Оказывается, у Amazon есть мобильный URL-адрес и URL-адрес рабочего стола. На настольном Safari я перешел на iPhone в качестве пользовательского агента (Разработка> Пользовательский агент> Safari - iOS 13.1.3 - iPhone) и получил соответствующий URL-адрес для мобильного устройства.
источник