V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
heat
V2EX  ›  问与答

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

  •  
  •   heat · Sep 28, 2016 · 2636 views
    This topic created in 3499 days ago, the information mentioned may be changed or developed.
    我的环境是 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 replies    2016-09-29 09:15:41 +08:00
    loveuqian
        1
    loveuqian  
       Sep 28, 2016 via iPhone
    这个问题点一下 warning 就会帮你修正吧
    happyeveryday
        2
    happyeveryday  
       Sep 28, 2016
    好久没用了可能记错, swift 里的 selector 不是用:#selector()这样的写法吗?
    wudb
        3
    wudb  
       Sep 28, 2016
    #selector(SettingViewController.onClose)
    Shvier
        4
    Shvier  
       Sep 28, 2016
    楼上+1 ,并且 Xcode 应该会提示修改方法。
    heat
        5
    heat  
    OP
       Sep 28, 2016
    @loveuqian @happyeveryday @Shvier 这已经是 XCODE 提示并修改后的结果了。


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

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

    iOS9 or later :

    webView.configuration.applicationNameForUserAgent = "myua"

    这样就行了,建议尽量别去调用私有 API
    sunhr
        9
    sunhr  
       Sep 28, 2016
    补充一下, UserDefaults 那个方法需要自己把 UA 拼好哟,我的做法是新建个空白 WebView 然后调用 JS 取默认的 UA ,在结尾插入自定义的字段
    Paladinfeng
        10
    Paladinfeng  
       Sep 28, 2016
    你调这方法设置 UserAgent 不怕被拒吗?
    heat
        11
    heat  
    OP
       Sep 28, 2016
    @Paladinfeng 这。。。怎么说?
    wudb
        12
    wudb  
       Sep 29, 2016
    @heat 你没看清楚哦,括号内是类名.func 的,没有双引号
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4108 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 10:19 · PVG 18:19 · LAX 03:19 · JFK 06:19
    ♥ Do have faith in what you're doing.