V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
heat
V2EX  ›  问与答

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

  •  
  •   heat · 2016-09-28 09:18:37 +08:00 · 2034 次点击
    这是一个创建于 2772 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我的环境是 swift2.3 。需要给 WKwebview 一个 UA ,用如下写法:

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

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

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


    @wudb webView.performSelector(#selector("_setApplicationNameForUserAgent:"), withObject: "myua") 这样会直接 failed
    loveuqian
        6
    loveuqian  
       2016-09-28 11:08:57 +08:00
    webView 好像有个 customUserAgent 属性,可以用嘛
    Shvier
        7
    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
        8
    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
        9
    sunhr  
       2016-09-28 15:08:36 +08:00
    补充一下, UserDefaults 那个方法需要自己把 UA 拼好哟,我的做法是新建个空白 WebView 然后调用 JS 取默认的 UA ,在结尾插入自定义的字段
    Paladinfeng
        10
    Paladinfeng  
       2016-09-28 16:39:52 +08:00
    你调这方法设置 UserAgent 不怕被拒吗?
    heat
        11
    heat  
    OP
       2016-09-28 21:10:30 +08:00
    @Paladinfeng 这。。。怎么说?
    wudb
        12
    wudb  
       2016-09-29 09:15:41 +08:00
    @heat 你没看清楚哦,括号内是类名.func 的,没有双引号
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1750 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:29 · PVG 08:29 · LAX 17:29 · JFK 20:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.