我的应用程序中有一个UIWebView,一切运行良好,但某些恼人的网页已禁用用户右键单击选择文本并显示复制粘贴菜单控制器的功能。我需要在这些网页上为用户重新启用这些操作。我怀疑答案与将{Javascript注入webViewDidFinishLoading:
的页面有关,但我不确定如何制作这个Javascript。有没有人有任何想法?
从我在网页上查看的内容中,我发现它在CSS中禁用了选择。他们正在通过外部样式表文件加载它,如果该信息有帮助。
<link rel="stylesheet" media="screen" type="text/css" href="/css/styleSheet.css?hash=174">
包含
body {
-webkit-user-select: none;
}
我已尝试注入以下内容,但它无效。
NSString* css = @"\"body { -webkit-user-select: default; }\"";
NSString* js = [NSString stringWithFormat:
@"var styleNode = document.createElement('style');\n"
"styleNode.type = \"text/css\";\n"
"var styleText = document.createTextNode(%@);\n"
"styleNode.appendChild(styleText);\n"
"document.getElementsByTagName('head')[0].appendChild(styleNode);\n",css];
[self.webView stringByEvaluatingJavaScriptFromString:js];
但是,如果我在UIWebView上使用桌面Safari Web Inspector,并将页面的外部CSS表单更改为 - webkit-user-select:
到default
,则可以正常工作。我只需要一种能够在我的代码中执行此操作的方法。但是如果我将这一行添加到html页面,在加载样式表的地方下面,它就不起作用了。
<link rel="stylesheet" media="screen" type="text/css" href="/css/styleSheet.css?hash=174">
<style type="text/css">body { background: #AAA; -webkit-user-select: default; }</style>
这就是我在Safari Web Inspector中看到的内容。出于某种原因,我在样式表之后添加的样式仍然被覆盖。
如何将-webkit-user-select:
更改为默认值?我更喜欢使用Javascript的答案,而不是将其添加到htmlString并重新加载页面。
解决:
因此,将参数更改为auto
可以正常工作,如下所示。
NSString* css = @"\"body { -webkit-user-select: auto; }\"";
NSString* js = [NSString stringWithFormat:
@"var styleNode = document.createElement('style');\n"
"styleNode.type = \"text/css\";\n"
"var styleText = document.createTextNode(%@);\n"
"styleNode.appendChild(styleText);\n"
"document.getElementsByTagName('head')[0].appendChild(styleNode);\n",css];
[webView stringByEvaluatingJavaScriptFromString:js];
答案 0 :(得分:2)
第一个"-webkit-user-select: auto | none | text;"
webkitUserSelect仅获取此值。
然后
Nsstring *OverrideCssRules = @"document.body.style.cssText += '-webkit-user-select: auto !important;'"; OR @"document.body.style.webkitUserSelect='auto !important'";
[self.webView stringByEvaluatingJavaScriptFromString:OverrideCssRules];