【发布时间】:2012-12-19 03:03:47
【问题描述】:
我正在尝试更改 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 应用商店,我将无法使用此方法,因为 Windows 8 应用程序不正式支持 UrlMkSetSessionOption。
在寻找替代品时,我遇到了this。然而,尽管这样可行,但页面呈现非常糟糕,几乎没有显示任何图像或其他元素。
所以我希望另一种方法是使用 WebView.InvokeScript 方法并注入一些 JavaScript 来更改 UA。说实话,问题在于我是 JavaScript 的初学者。
我做了更多的搜索,显然这样的 (found here) 会起作用:
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 中侦听在触发时运行此代码的事件?
【问题讨论】:
-
Tha JS 解决方案无法工作恕我直言,因为 UserAgent 已经与第一个 HTTP GET 一起发送到服务器 - 早在执行任何 JS 之前!
-
你确定吗?这是我找到 JS 代码的地方,根据那些用户的说法,它似乎可以工作。 stackoverflow.com/a/1307088/1949034
-
是的,我确定...该解决方案适用于“JS 单元测试”——即在运行 JS 时在页面内部——在收到任何 HTML/JS 之前它(根据定义)无法工作...浏览器在 HTTP 请求中发送用户代理,这发生在任何 JS 甚至可以运行之前!
-
好的,我明白了。我想我必须等到有官方支持 WinRT 的解决方案可用。感谢您的帮助。
标签: c# javascript windows-8 windows-store-apps windows-store