搜索
查看: 2473|回复: 3

修改navigator.userAgent模拟手机

[复制链接]

51

主题

286

帖子

1729

积分

荣誉会员

Rank: 8Rank: 8

积分
1729
发表于 2017-8-31 14:56:52 | 显示全部楼层 |阅读模式
前端js代码通常使用navigator.userAgent来判断是PC还是手机以及微信,类似:
  1. var isApple = navigator.userAgent.match(/iPad|iPhone|Linux|Android|iPod/i) != null;
复制代码


在使用web窗体模拟手机端
  1. var wb = web.form( winform ,/*_UIFLAG_*/,/*_DLCTL_*/
  2.         ,/*USER AGENT*/,true/*securityTrusted*/ );
复制代码


修改低4个参数没有成功,好像是第4个参数的作用是在发起http请求的时候起作用,但对于前端js查询navigator.userAgent无能为力
后来研究出了办法,分享一下,见如下代码:
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="Web Form";right=759;bottom=469)
  4. winform.add()
  5. /*}}*/

  6. //创建web窗体
  7. import web.form;
  8. userAgent = //Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 wechatdevtools/0.7.0 MicroMessenger/6.3.9 Language/zh_CN webview/0
  9. var wb = web.form( winform ,/*_UIFLAG_*/,/*_DLCTL_*/
  10.         ,userAgent/*USER AGENT*/,true/*securityTrusted*/ );
  11. winform.show();

  12. show = function(){
  13.         winform.text = "请稍后..."
  14.         wb.go("http://baidu.com/")        
  15.         wb.wait("");
  16.         winform.text = "完成"
  17.         wb.doScript("alert(navigator.userAgent)")       
  18. }

  19. show()

  20. Urlmon = raw.loadDll("Urlmon.dll");
  21. _URLMON_OPTION_USERAGENT = 0x10000001;
  22. Urlmon.UrlMkSetSessionOption(_URLMON_OPTION_USERAGENT, userAgent, #userAgent, 0);

  23. show()

  24. //启动消息循环
  25. win.loopMessage();
复制代码


要注意一点,这个API好像是对本进程全局修改,也就是如果只想单次生效的话,每次得想办法改回正常值
◆ 半醒半醉日复日,花落花开年复年 ◆
回复

使用道具 举报

2

主题

39

帖子

359

积分

二级会员

Rank: 3Rank: 3

积分
359
发表于 2017-9-12 22:25:58 | 显示全部楼层
感觉没什么用
回复

使用道具 举报

12

主题

82

帖子

794

积分

培训班

积分
794
QQ
发表于 2017-9-13 22:00:37 | 显示全部楼层
web.form.util.setUserAgent(wb,tempHeader);
可以直接改指定的userAgent
论坛看到的,以前的帖子
回复

使用道具 举报

51

主题

286

帖子

1729

积分

荣誉会员

Rank: 8Rank: 8

积分
1729
 楼主| 发表于 2017-9-14 19:52:18 | 显示全部楼层
金满斗 发表于 2017-9-13 22:00
web.form.util.setUserAgent(wb,tempHeader);
可以直接改指定的userAgent
论坛看到的,以前的帖子
  1. setUserAgent = function(wb,agent){  
  2.         wb.agent = agent;
  3.         ::Urlmon.UrlMkSetSessionOption(agent?0x10000001:0x10000002,agent,#agent,null);
  4.         ambientPropertyChange(wb,-5513);
  5. }
复制代码


看了下源码,是一样的方法,没搜到以前的帖子。原来已经有封装好的函数了。aardio的确需要的东西几乎都有了,只是有时候自己还不知道
◆ 半醒半醉日复日,花落花开年复年 ◆
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2020-1-29 22:39 , Processed in 0.062500 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表