2010-01-30 8 views
16

Bir web sitesine göz atmaya çalışıyorum, ancak yalnızca Windows ve Mac altında çalışıyor çünkü çalışmakta olduğum mimariyi bulmak için JavaScript'ten navigator.platform'u kullanıyorlar. Tabii ki, onlar da tarayıcının kullanıcı aracısını kullanıyorlar, ama bu taklit etmek kolaydı.Windows'ta olmadığımı görmek için 'navigator' JavaScript nesnesine bakan bir siteyi nasıl kandırabilirim?

İşte .js söz konusu: http://pastebin.com/f56fd608d. Tarayıcı algılamasından sorumlu kod üstte. Site çalışmadan önce .js dosyasını değiştirmenin herhangi bir yolu var mı, yoksa benzer bir şey var mı? JavaScript konsolu kullanımı sonucu

:

>navigator.platform
Linux i686

Açıkça ben tarayıcının kullanıcı aracısı değişti ama kullanıcı ajanından değer almaya navigator.platform görünmüyor.

Belki de bir kullanıcı bu siteyi kullanmak için VirtualBox'ın altında Windows işletiminden nefret ettiğim için navigator.platform tarafından döndürülen değeri nasıl değiştireceğini biliyordur.

DÜZENLEME: Bu, Linux kullanıcıları web sitelerine yapay olarak erişimin reddedilmiş olabileceği ve bu konuda hiçbir şey yapamayacağı için bu ilgi çekebilir. Firefox verimlerinde (herhangi bir anda) bu özelliğini değiştirmek için çalışılıyor

+0

Hangi tarayıcıları kullanıyorsunuz? –

+0

Chrome ve Firefox kullanıyorum.Her ikisi de platform bilgilerini Kullanıcı Aracısı'ndan değil başka bir yerden alır. Muhtemelen yerleşiktir. Linux altında herhangi bir tarayıcıyı taklit eden bir "navigator.platform" sağlayabiliyordum. – Radu

+1

Radu: Tüm platformlarda IE dışındaki tüm tarayıcılar '__defineGetter__' özelliğini destekliyor. Aradığın şey bu. –

cevap

14

, sen sinsi olmak zorunda - onun platform yerine, navigator gibi davranır bir nesne oluşturmak, sonra da ona navigator ayarlayın.

var fake_navigator = {}; 

for (var i in navigator) { 
    fake_navigator[i] = navigator[i]; 
} 

fake_navigator.platform = 'MyOS'; 

navigator = fake_navigator; 

sen (Greasemonkey, bir addon veya Chrome uzantısı kullanarak) Belge yüklenmeden önce bu kodu çalıştırmak durumunda

, ardından sayfa "MyOS" olarak navigator.platform göreceksiniz.

Not: Yalnızca Chrome'da test edilmiştir.

+0

Evet, bu sinsi :) Yardımlarınız için teşekkür ederiz! – Radu

+4

Aslında, platform alıcısını değiştirebilirsiniz. Hiçbir platform ayarlayıcı yok, bu yüzden navigator.platform = ... 'bir şey yapmıyor ama Chrome tüm nesnelerde standart olmayan '__defineGetter__' yöntemini destekliyor. Firefox'un ön alfaları ECMAScript5'in 'Object.defineProperty' özelliğini de destekler. –

+0

Önyargılı olabilirim (çünkü benim cevabım) ama bir alıcıyı daha çok tanımlamayı seviyorum. Ama bu da işe yarıyor ve alıcı yaklaşımı olmasaydı düşündüğüm şey buydu. – ephemient

-1

:

Error: setting a property that has only a getter

Source File: index.html

Line: 1

Bu yüzden zor bir zaman olacak düşünüyorum.

Düzeltme hakkında contact the author numaralı telefonu kullanmayı denedim.

17
var fakePlatformGetter = function() { 
    return "your fake platform"; 
}; 
if (Object.defineProperty) { 
    Object.defineProperty(navigator, "platform", { 
    get: fakePlatformGetter 
    }); 
} else if (Object.prototype.__defineGetter__) { 
    navigator.__defineGetter__("platform", fakePlatformGetter); 
} 
+0

Bu sorunu çözmek için iyi bir yoldur – navee

4

about: config -> general.platform.override aşağıdaki gibi (büyük olasılıkla yapar) destekler Object.defineProperty() kullandığınız tarayıcı, aynı hedefe ulaşma daha modern bir yoldur şartıyla

+0

artık bu Firefox 24'te mevcut değil. Buna hangi sürüm izin verdi? – Skuta

1

:

Object.defineProperty(navigator, 'platform', { 
    value: 'my custom value', 
    configurable: true // necessary to change value more than once 
}); 

Bu istediğiniz herhangi özel bir değer olarak ayarlamak için izin verir ve aynı zamanda sayfayı yeniden gerek kalmadan bunu istediğiniz kadar defalarca değiştirmenizi sağlar.

İlgili konular