NativeScript:禁用 iOS WebView 缩放控件的方法?

mee*_*mee 4 webview ios nativescript angular2-nativescript

我试图找出一种方法来防止用户通过捏手势和双击在 iOS WebView (tns-ios 3.4.1) 上放大和缩小,基本上禁用所有缩放,就像在苹果推出之前使用的 html 元标记一样让用户决定是否要使用 iOS 10 及更高版本进行缩放。我在这里找到了一个适用于 android 的解决方案,但对于 iOS,它似乎并不那么简单。

我对这个平台很陌生,目前这可能吗?我发现 NS 最近从 UIWebView 切换到 WKWebView,我们可以从 NativeScript(*with angular)以某种方式使用allowedMagnification属性吗?

Man*_*noj 5

不,您将无法使用allowsMagnification. 您将扩展至您自己的 WebView 组件版本,以便更新元配置以停止缩放。

更新:

为了禁用缩放,必须修改从 {N} 核心模块 (v5.x) 注入的默认视口,以下是操作方法。

import { WebView } from 'tns-core-modules/ui/web-view';

declare var WKUserScript, WKUserScriptInjectionTime, WKUserContentController, WKWebViewConfiguration, WKWebView, CGRectZero;

(<any>WebView.prototype).createNativeView = function () {
    const jScript = `var meta = document.createElement('meta'); 
    meta.setAttribute('name', 'viewport');
    meta.setAttribute('content', 'initial-scale=1.0 maximum-scale=1.0');
    document.getElementsByTagName('head')[0].appendChild(meta);`;
    const wkUScript = WKUserScript.alloc().initWithSourceInjectionTimeForMainFrameOnly(jScript, WKUserScriptInjectionTime.AtDocumentEnd, true);
    const wkUController = WKUserContentController.new();
    wkUController.addUserScript(wkUScript);
    const configuration = WKWebViewConfiguration.new();
    configuration.userContentController = wkUController;
    configuration.preferences.setValueForKey(
        true,
        "allowFileAccessFromFileURLs"
    );
    return new WKWebView({
        frame: CGRectZero,
        configuration: configuration
    });
};
Run Code Online (Sandbox Code Playgroud)

游乐场样本


小智 5

我能够从 NS 3.3 - 4.1

获取您的 #webview 参考,然后为 ios 和 android 设置这些属性以修复视图缩放。

let webView: WebView = this.webView.nativeElement;
webView.on(WebView.loadStartedEvent, function (args: LoadEventData) {               
    if (webView.android) {
        webView.android.getSettings().setBuiltInZoomControls(false);
        webView.android.getSettings().setDisplayZoomControls(false);
    } else {
        webView.ios.scrollView.minimumZoomScale = 1.0;
        webView.ios.scrollView.maximumZoomScale = 1.0;
        webView.ios.scalesPageToFit = false;
        webView.ios.scrollView.bounces = false;
    }
});
Run Code Online (Sandbox Code Playgroud)