Browser设置UA值

SWE Browser中的OptionMenu是Controller通过onKeyDown监听KEYCODE_MENU来显示的

    public boolean onKeyDown(int keyCode, KeyEvent event) {
          if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0) {
              // Hardware menu key
              mAppMenuHandler.showAppMenu(mActivity.findViewById(R.id.taburlbar),
                    true, false);
              return true;
          }
mAppMenuHandler = new AppMenuHandler(browser, this, R.menu.browser);

查看“关于”菜单处理,Engine.getDefaultUserAgent()来获取UA值。 看上去没法直接修改UA值了。(直接用string重新赋值无法通过A-ku test,因为UA没写到系统里)

case R.id.about_menu_id:
                Bundle bundle = new Bundle();
                Log.i("antoon", "Engine.getDefaultUserAgent = "+Engine.getDefaultUserAgent());
                bundle.putCharSequence("UA", Engine.getDefaultUserAgent());//org.codeaurora.swe.Engine看上去遥不可及
                bundle.putCharSequence("TabTitle", mTabControl.getCurrentTab().getTitle());
                bundle.putCharSequence("TabURL", mTabControl.getCurrentTab().getUrl());
                BrowserPreferencesPage.startPreferenceFragmentExtraForResult(mActivity,
                        AboutPreferencesFragment.class.getName(), bundle, 0);
                break;------------------------------------------org.codeaurora.swe.Engine中
public static String getDefaultUserAgent() {
        return AwSettings.getDefaultUserAgent();//org.chromium.android_webview.AwSettings看上去更加遥不可及
}
然后搜索到这个 http://blog.csdn.net/chaoy1116/article/details/19083081?utm_source=tuicool  都要改动 C/C++ 了,对于不懂C的似乎没法改了。

然后发现com.android.browser.BrowserConfigBase中可以对UA进行自定义,Browser中已经提供了完整的设置方法,不用担心UA写到底层的处理。

  public void overrideUserAgent() {

        // Check if the UA is already present using command line file
        if (BrowserCommandLine.hasSwitch(OVERRIDE_USER_AGENT)) {
            return;
        }        

        //String ua = mContext.getResources().getString(R.string.def_useragent);//源码默认用R.string.def_useragent配置
        String ua = Settings.System.getString(mContext.getContentResolver(), UA);//我改成读取Settings.system数据库配置

        if (TextUtils.isEmpty(ua))
            return;

        ua = constructUserAgent(ua);

        if (!TextUtils.isEmpty(ua)){
            BrowserCommandLine.appendSwitchWithValue(OVERRIDE_USER_AGENT, ua);//这里将UA写到系统中
        }
    }--------------------------------------------org.codeaurora.swe.BrowserCommandLine
  public static void appendSwitchWithValue(String switchString, String value) {
        CommandLine.getInstance().appendSwitchWithValue(switchString, value);//org.chromium.base.CommandLine
    }
和上面org.chromium.android_webview.AwSettings获取UA同理,org.chromium.base.CommandLine设置UA值也写到了C/C++层了。
由于 BrowserConfigBase设置UA 在Browser启动初始化时调用,所以Engine.getDefaultUserAgent()获取的就是自定义的UA了。
时间: 2024-10-16 19:21:08

Browser设置UA值的相关文章

如何在中间件设置UA池,代理池

一.UA池:User-Agent池 - 作用:尽可能多的将scrapy工程中的请求伪装成不同类型的浏览器身份. - 操作流程: 1.在下载中间件中拦截请求 2.将拦截到的请求的请求头信息中的UA进行篡改伪装 3.在配置文件中开启下载中间件 代码展示: #导包 from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware import random #UA池代码的编写(单独给UA池封装一个下载中间件的一个

spring @Value 设置默认值

@Value 的作用不用说 大家都知道 注解模式下 读取配置文件 注入属性值 /** * MQ地址 */ @Value("${NamesrvAddr}") private String namesrvAddr;   上面的是一个标着的 @Value 注解 如果配置文件中没有设置 NamesrvAddr Spring 在启动的时候讲报错. 设置默认值很简单 @Value("${NamesrvAddr:192.168.0.1}") private String name

EF Core1.0 CodeFirst为Modell设置默认值!

当我们使用CodeFirst时,有时候需要设置默认值! 如下 public int Delete { get; set; } = 0; public string AdminName {get; set;} = "admin"; public bool CacheDbResults { get; set; } = true;

Siebel 找字段、下拉菜单设置值、弹出新页面、弹出选择框、设置默认值 、按钮代码

产品缺陷太多,跟用户交互不人性化.例如搜索新建客户功能,用户输入后会自动保存数据,一旦保存后一. 找字段1.简单 CTRL+Q CTRL+Q 服务请求编号----对应的表.字段.长度: 客户编码-----对应的表.字段.长度(弹出新页面):- 点击上面的pick Applet会弹出“选取客户”对话框 有JOIN就不用TABLE:require代表必填 字段有两个值----项目编号 下图确定只有projectNum有用 3.表单中的字段(不在list column中,而是在control) 二.下

SplendidCRM中给来自EditView中的listbox控件设置选中值或数据源

DropDownList list = this.findContol("aas") as DropDownList;list.DataSource = new DataTable() ------------------------------- Control ctl = this.FindControl("NAME");            if (ctl != null)            {                if (ctl is Dro

Winform给TextBox设置默认值(获取焦点后默认值消失)

主要是通过TextBox的获取焦点Enter和失去焦点Leave两个事件来实现的, 思路如下: 1.设置一个字符串常量,作为TextBox的默认值: 2.在界面的构造方法中将默认值赋值给TextBox,并设置TextBox的ForeColor为灰色: 3.编写获取焦点事件 TextBox_Enter(object sender, EventArgs e) ,判断TextBox的Text是否等于默认值, 是:则将TextBox内容清空,并将前景色ForeColor改成正常的颜色 4.失去焦点事件

.net 使用Json(),maxJsonLength属性设置的值问题

“使用JSON JavaScriptSerializer进行序列化或反序列化时出错.字符串的长度超过了为maxJsonLength属性设置的值” 今天业务找我说线上的国家地区都显示数字(地区ID),而不显示地区名字. 当时我觉得不太可能啊,虽然控件很老,已经替换了,还没到发布日期,但是线上的代码绝对没问题啊. 等我去看页面,才懵逼了,真的有问题,但是线上master的代码在本地附加到进程完全OK. 猜想: 1.线上JS文件有改动: 2.配置文件有改动 然后开始查看Git记录发现今天并没有上传记录

Extjs combobox设置默认值

转载:http://www.54mask.com/extjs-combobox-default-value.html 相信很多人都遇到了在ExtJS框架中设置combo组件默认值的需求,ExtJS框架并没有提供现成的配置项或者方法来解决此问题,本人认为主要是因为此种需求的应用场景有限且很难达到适应于不同场景的实现. combo组件的设值其实很简单: 1 var getRecruitmentName = new Ext.data.JsonStore({ 2 url: '',--后台地址 3 bas

MVC中给TextBoxFor设置默认值和属性

例如:(特别注意在设置初始值的时候 Value 中的V要大写) @Html.TextBoxFor(model => model.CustomerCode, new { Value=" 默认",@style="width:240px;height:35px;",id="UserCode", @class="search_key_content"})