WKWebview:禁用交互和点击链接

问题描述 投票:0回答:6

有没有办法禁用网络视图上的交互? 这样用户就不能比加载的 webview 更进一步了?

编辑: 禁用 UserInteractions 不是解决方案,因为网站仍然必须可滚动。

ios objective-c wkwebview
6个回答
9
投票

实施

WKNavigationDelegate
协议:

@interface ViewController () <WKNavigationDelegate>

设置您的

WKWebView
navigationDelegate
属性:

self.wkWebView.navigationDelegate = self;

然后为您要限制的 URL 实施策略:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {

    if ([navigationAction.request.URL.absoluteString containsString:@"somedomain.com/url/here"]) {
        decisionHandler(WKNavigationActionPolicyAllow);
    }
    else {
        decisionHandler(WKNavigationActionPolicyCancel);
    }
}

9
投票

WKNavigationDelegate
解决方案仅阻止用户跟踪链接。我还想防止与其交互的表单控件,同时仍允许滚动页面。最终我发现这可以通过禁用 Web 视图的滚动视图的子视图来实现:

斯威夫特

self.webView.scrollView.subviews.forEach { $0.isUserInteractionEnabled = false }

Objective-C

for (UIView *subview in self.webView.scrollView.subviews)
{
    subview.userInteractionEnabled = NO;
}

3
投票

首先,您必须将委托交给您的 webkit,然后添加以下代码。 斯威夫特 5.0

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    Activity.stopAnimating()
    let javascriptStyle = "var css = '*{-webkit-touch-callout:none;-webkit-user-select:none}'; var head = document.head || document.getElementsByTagName('head')[0]; var style = document.createElement('style'); style.type = 'text/css'; style.appendChild(document.createTextNode(css)); head.appendChild(style);"
    webView.evaluateJavaScript(javascriptStyle, completionHandler: nil)
}

这段代码将做什么,我们以编程方式添加 css,这将禁用 webview 中的交互


1
投票

这些 javascript 行将通过覆盖 HTML 来禁用长按和链接触摸。基于框架的东西(例如嵌入式 YouTube 视频)仍然可以工作。

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    webView.evaluateJavaScript("document.documentElement.style.webkitUserSelect='none'")
    webView.evaluateJavaScript("document.documentElement.style.webkitTouchCallout='none'")
    webView.evaluateJavaScript("var elems = document.getElementsByTagName('a'); for (var i = 0; i < elems.length; i++) { elems[i]['href'] = 'javascript:(void)'; }")
}

-3
投票

有没有办法禁用网站上的交互?这样用户就不能再继续浏览网页或向用户显示加载程序了? 我的网站 Cheap Data 双击时会自动注销用户我需要禁用此功能但不起作用,这就是为什么我认为在单击时添加加载程序


-4
投票

您可以按照以下步骤进行。

//-----------------------------------------------------------------------

#pragma mark - UIWebView Methods

//-----------------------------------------------------------------------

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {



    return YES;
}

//----------------------------------------------------------------

- (void)webViewDidStartLoad:(UIWebView *)webView {
//disable user interaction 
}

//----------------------------------------------------------------

- (void)webViewDidFinishLoad:(UIWebView *)webView{
//enable user interaction
}

//----------------------------------------------------------------

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
    //enable user interaction
}
© www.soinside.com 2019 - 2024. All rights reserved.