読み込んでいます...

在很多时候,我们可能需要更改浏览器的User Agent来让我们有更多的权限做更多的事情,又或者可以做一些想做平时又做不了的事情,这个时候我们就需要更改User Agent来达到我们邪恶的目的,关于User Agent,我们还需要回过头来看看我们的HTTP协议。这里,我们可以使用Fiddler了解HTTP协议。

首先打开Fiddler,然后再Firefox里面打开对Firefox里面的信息的捕捉。(在右下角有一个Fiddler的插件),打开后,我们可以在google里面搜索,然后再Fiddler里面看看我们发送的HTTP请求的Client信息。User Agent的信息主要在HTTP头部信息,这里我们只要看Header部分的信息即可,然后我们可以找到User Agent这一行,这些信息如下。

//User Agent信息
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5 GTB5

我们可以看到我们请求服务器的时候,会将我们的一些信息发送给接收服务器,即这里有Mozilla信息,操作系统的信息,编码的信息。

很多网站都会通过这些信息响应不同的请求,例如如果你通过手机上网的时候,这个地方的信息可能就是WM或者是IPhone了,如果你想从一般的浏览器中访问手机版的信息,就很难下手了,这个时候,你就需要更改你的User Agent信息来欺骗接收服务器。而在开发Firefox插件的时候,你就需要通过下面的两个XPCOM提供的服务和接口来获取相应的信息。在做之前,最好先了解一下。

Components.classes["@mozilla.org/supports-string;1"].
createInstance(supportsStringInterface);

Components.classes["@mozilla.org/preferences-service;1"].
getService(Components.interfaces.nsIPrefService).getBranch(
"");

在了解了这两个提供的类之后,我们就可以编写相应的代码了,可以写一个设置的函数,示例代码如下所示。 

setStringPreference: function(preference, value)
{
    
// If the preference is set
    if(preference)
    {
        
var supportsStringInterface = Components.interfaces.nsISupportsString;
        
var string  = Components.classes["@mozilla.org/supports-string;1"]
                      .createInstance(supportsStringInterface);
        string.data
= value;
        
this.getPreferencesService().setComplexValue(preference, supportsStringInterface,
        string);
    }
},

通过上面的函数,我们就可以设置相应的User Agent信息了,例如我们要通过IPhone去访问一个专门提供IPhone手机浏览的网站,就可以通过这个函数实现,示例代码如下所示。 

onLoad: function()
{
    
try
    {
        UserAgentSwitcherPreferences.setStringPreference(
"general.useragent.appName",
       
"Mozilla");
        UserAgentSwitcherPreferences.setStringPreference(
"general.appname.override",
       
"Netscape");
        UserAgentSwitcherPreferences.setStringPreference(
"general.appversion.override",
       
"5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18
        (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16");
        UserAgentSwitcherPreferences.setStringPreference("general.platform.override",
       
"iPhone");
        UserAgentSwitcherPreferences.setStringPreference(
"general.useragent.override",
       
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18
        (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16");
        UserAgentSwitcherPreferences.setStringPreference("general.useragent.vendor",
       
"Apple Computer, Inc.");
        UserAgentSwitcherPreferences.setStringPreference(
"general.useragent.vendorSub",
       
"");
    }
    
catch(e)
    {
        alert(e);
    }
}

在编写完成之后,我们只要为load方法添加一个事件即可,代码可以编写如下。

window.addEventListener("load", HotSidebar.onLoad , false);

这样,我们就可以在浏览器加载的时候更改相应的User Agent了,值得注意的是,如果你不想一直都这样的话,最好再添加一个方法能够改回来User Agent,:)。

另外,如果你想模拟成IE6,IE7,IE8,就自己去看看这些User Agent的规则是怎样的了。Firefox有一个插件叫User Agent Switcher可以帮助你。

注意:如果这里你改了User Agent,可能改就是所有的Firefox的User Agent请求。

392路过 1评论 Firefox Addon 阅读全文..

:-D :-? 8) :cry: 8-O :lol: :-x :-| :?: :-P :oops: :roll: :( :) :-o :wink: more »