V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Jamy
V2EX  ›  JavaScript

如何判断页面是在 webview(或浏览器组件)中打开?

  •  
  •   Jamy · 2018-09-15 11:00:00 +08:00 · 8584 次点击
    这是一个创建于 2260 天前的主题,其中的信息可能已经有所发展或是发生改变。

    经常有外挂在 webview 中打开我们的页面, 然后修改页面中的数据. 故想让 js 判断出当前是不是运行在 webview 中, 有个思路是:检测 windows.external 比较 webview 和正常浏览器的异同,但是没找到相关的资料. 各位大佬有没有更好的方法或者资料呢?

    17 条回复    2018-09-15 23:21:01 +08:00
    p2pCoder
        1
    p2pCoder  
       2018-09-15 11:15:14 +08:00
    应该是没有办法,因为 webview 本身就是浏览器,很多参数也可以自己设置
    你可以像央行征信那样搞个 ie 插件,限制在 ie 中,或者其他插件
    不过对于大多数互联网产品是不可能这么设计的
    当然,我只是 用 webview 开发过几个爬虫(就是类似的钓鱼逻辑),也不是专业的 android ios 开发,不过 webview 肯定比 selenium 这种服务端爬虫 还难针对
    deepkolos
        2
    deepkolos  
       2018-09-15 11:18:48 +08:00
    ua?
    moult
        3
    moult  
       2018-09-15 11:26:38 +08:00 via iPhone
    无解。因为几乎所有的的浏览器其实也就是个 WebView 套壳,尤其是 iOS 下面。
    shily
        4
    shily  
       2018-09-15 11:28:37 +08:00 via Android
    Android 请求 header 的 x-requested-with 了解一下
    Hilong
        5
    Hilong  
       2018-09-15 13:00:41 +08:00 via Android
    咦,提供了一个爬虫的新思路,原来可以网页端直接发请求,我之前怎么没想到
    p2pCoder
        6
    p2pCoder  
       2018-09-15 13:24:33 +08:00
    @Hilong https://github.com/zgbgx/appWeiboInfoCrawl
    我倒是做过全套的,ios 和 android
    包括 京东 淘宝 学信 征信(因为 IE 插件不可用) 和 电信运营商,核心就是 用户登录后,自动获取信息,用户 网贷 风控决策,建模,前后总共花了两个多月
    不过最后因为公司规模也大 app sdk 在发版上不好搞,几个产品没扯皮过,也搁置了,滚回去做后端了

    以后有机会还可以再搞搞,这东西就像 钓鱼和 僵尸一样,比较缺德
    wangxiaoaer
        7
    wangxiaoaer  
       2018-09-15 13:47:35 +08:00 via Android
    @p2pCoder 是通过 webview 加载页面,同时在 webview 中注入自己的 js 去获取内容吗?这和浏览器插件没本质区别吧。

    比如一些价格用假数字,真正的价格能过自定义的字体展示,即使在 webview 中,获取到的也是假的,还是要解析字体吧。
    p2pCoder
        8
    p2pCoder  
       2018-09-15 16:56:26 +08:00
    @wangxiaoaer 核心不在于获取一些公共的信息,比如你说的商品清单
    而是让 用户 输入 账号 密码后,登陆获取账户信息,比如四要素(姓名 身份证 电话 银行卡),账单,购物清单,花呗额度,白条信息,学信信息 通话记录等
    其实,很类似钓鱼,这种需要登陆的用户征信的 爬虫和普通的电商 求职 等 请求 大量 列表的爬虫还是思路有很大区别的
    enjoyCoding
        9
    enjoyCoding  
       2018-09-15 17:09:13 +08:00 via Android   ❤️ 1
    webview 一般是安卓创建的吧,可以让安卓在 js 中加一个全局变量不,我看公司的代码中就有这种全局变量,只是不知道是从哪里来的,等周一上班后我看看,我也不确定是不是安卓那边给的。
    xingyue
        10
    xingyue  
       2018-09-15 17:34:37 +08:00 via Android
    巧了我最近的项目就要页面判断是在 webview 中运行还是在手机浏览器中运行,通过 UA 判断可行度不高,需要提前和原生开发约定好一个方法用来判断,譬如判断有没有 window.android 这个对象
    billyu
        11
    billyu  
       2018-09-15 18:12:48 +08:00 via Android
    url 后面加个参数
    ysc3839
        12
    ysc3839  
       2018-09-15 18:55:05 +08:00 via Android
    没办法。即使是普通浏览器也可以修改数据。
    opengps
        13
    opengps  
       2018-09-15 21:13:51 +08:00 via Android
    可以防小白。但是不能防牛人,没办法彻底,毕竟可以完全模拟浏览器提交
    murmur
        14
    murmur  
       2018-09-15 21:38:27 +08:00
    webview 和浏览器有啥区别
    安卓还允许用系统 webview 呢
    liuwenxu
        15
    liuwenxu  
       2018-09-15 22:45:11 +08:00 via Android
    遍历方法和全局变量,有不同就关闭
    janus77
        16
    janus77  
       2018-09-15 22:53:51 +08:00
    案例是有的,比如微信内置浏览器,可以做到识别
    不过技术细节不知道,你可以去尝试一下
    POPOEVER
        17
    POPOEVER  
       2018-09-15 23:21:01 +08:00
    #4 楼 是正解,服务端拿 header 里的 X-Requested-With,然后直接返回出错
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2131 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:44 · PVG 08:44 · LAX 16:44 · JFK 19:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.