有用 swift 的朋友么,帮忙看一眼这行给 webview 加 UA 的代码

2016-09-28 09:18:37 +08:00
 heat
我的环境是 swift2.3 。需要给 WKwebview 一个 UA ,用如下写法:

webView.performSelector(Selector("_setApplicationNameForUserAgent:"), withObject: "myua")

到是可以 work ,但是一直弹一条 warning 有点恶心:
No method declared with Objective-C selector '_setApplicationNameForUserAgent:'

GOOGLE搜了好久,大部分都是老版本的写法,或者根本不work,请问下在 swift2.3 里这个语句要如何写呢?
2042 次点击
所在节点    问与答
12 条回复
loveuqian
2016-09-28 09:27:19 +08:00
这个问题点一下 warning 就会帮你修正吧
happyeveryday
2016-09-28 09:29:27 +08:00
好久没用了可能记错, swift 里的 selector 不是用:#selector()这样的写法吗?
wudb
2016-09-28 09:34:41 +08:00
#selector(SettingViewController.onClose)
Shvier
2016-09-28 10:13:51 +08:00
楼上+1 ,并且 Xcode 应该会提示修改方法。
heat
2016-09-28 10:24:52 +08:00
@loveuqian @happyeveryday @Shvier 这已经是 XCODE 提示并修改后的结果了。


@wudb webView.performSelector(#selector("_setApplicationNameForUserAgent:"), withObject: "myua") 这样会直接 failed
loveuqian
2016-09-28 11:08:57 +08:00
webView 好像有个 customUserAgent 属性,可以用嘛
Shvier
2016-09-28 14:26:22 +08:00
刚刚手动 check 了一下,声明了一个叫做 test 的方法, webView?.perform(#selector(DHNewsDetailView.test)); 会出现警告'Unmanaged<AnyObject>?' is unused ,这是因为 performSelector 方法会返回一个这个类型的值,但是没有使用,所以会 warning ,如果你用 wkWebView loadRequest 的时候应该也会出现类似的警告,我不知道正确的解决方式,我的写法是 let _去接收这个变量。
sunhr
2016-09-28 15:05:27 +08:00
iOS8 or before :

UserDefaults.standard.register(defaults: ["UserAgent": "myua"])

iOS9 or later :

webView.configuration.applicationNameForUserAgent = "myua"

这样就行了,建议尽量别去调用私有 API
sunhr
2016-09-28 15:08:36 +08:00
补充一下, UserDefaults 那个方法需要自己把 UA 拼好哟,我的做法是新建个空白 WebView 然后调用 JS 取默认的 UA ,在结尾插入自定义的字段
Paladinfeng
2016-09-28 16:39:52 +08:00
你调这方法设置 UserAgent 不怕被拒吗?
heat
2016-09-28 21:10:30 +08:00
@Paladinfeng 这。。。怎么说?
wudb
2016-09-29 09:15:41 +08:00
@heat 你没看清楚哦,括号内是类名.func 的,没有双引号

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/309428

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX