0

我正在尝试在 Windows 8 应用程序中更改 Webview 的用户代理。目前,我正在这样做:

    [DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
    private static extern int UrlMkSetSessionOption(int dwOption, 
    string pBuffer, int dwBufferLength, int dwReserved);
    const int URLMON_OPTION_USERAGENT = 0x10000001;

然后,如果我需要将 UA 更改为 iPhone,例如:

            string ua = "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X)" + 
"AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25";
            UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, ua, ua.Length, 0);

这完美地工作。但不幸的是,如果我要将此应用程序提交到 Windows 应用商店,我将无法使用此方法,因为UrlMkSetSessionOption在 Windows 8 应用程序中不受官方支持。

在寻找替代品时,我遇到了这个。然而,尽管这样可行,但页面呈现非常糟糕,几乎没有显示任何图像或其他元素。

所以我希望另一种方法是使用WebView.InvokeScript方法并注入一些 JavaScript 来更改 UA。老实说,问题在于我是 JavaScript 的初学者。

我做了更多的搜索,显然这样的东西(在这里找到)会起作用:

navigator.__defineGetter__('userAgent', function(){
return 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25' // customized user agent
});

navigator.userAgent; // 'foo'

但就像我说的,我完全是 Javascript 的初学者。那么我应该什么时候注入代码呢?我是否需要在 JavaScript 中侦听在触发时运行此代码的事件?

4

1 回答 1

0

这很简单。

 string ua = "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X)" + "AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25";
            Uri targetUri = new Uri(url);
            HttpRequestMessage hrm=new HttpRequestMessage(HttpMethod.Get,targetUri);
            hrm.Headers.Add("User-Agent",ua);
            webView1.NavigateWithHttpRequestMessage(hrm);
于 2015-02-15T17:51:47.437 回答