我正在尝试在 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 中侦听在触发时运行此代码的事件?