2010-04-17 27 views
6

İçerik_kriptlerinin sayfanın hemen üzerinde yürütüldüğü izlenimi altındaydım, ancak şimdi bazı kum havuzu devam ediyor gibi görünüyor.Google Chrome uzantısı "içerik" komut dosyaları kum havuzlu mu?

I (hata ayıklama ve diğer geliştirme amaçları için) sitenin tüm XHR trafiğini oturum açmak için bir uzantısı üzerinde çalışıyorum ve konsolda aşağıdaki kokla kodu çalışır:

var o = window.XMLHttpRequest.prototype.open; 
window.XMLHttpRequest.prototype.open = function(){ 
    console.log(arguments, 'open'); 
    return o.apply(this, arguments); 
}; 
console.log('myopen'); 
console.log(window, window.XMLHttpRequest, window.XMLHttpRequest.prototype, o, window.XMLHttpRequest.prototype.open); 

Bu mesaj kaydeder her XHR gönderilir. Ancak bunu bir uzantıya koyduğumda, gerçek prototip değiştirilemez. Görünüşe göre betiğimin görebildiği window.XMLHttpRequest.prototype, gerçek sayfanınkinden farklı.

Bunun bir yolu var mı? Ayrıca, bu sanal alan davranışı herhangi bir yerde belgeleniyor mu? Etrafa baktım ama hiçbir şey bulamadım.

cevap

6

Bunu yapamazsınız. documentation göre:

Ancak içerik komut bazıları sınırlamalara sahiptir. Yapamazlar:

  • Kullanım krom * API'ler kendi uzantının sayfalar tarafından tanımlanan
  • kullanın değişkenler veya fonksiyonlar (chrome.extension parçalarının hariç)
  • kullanın değişkenler veya fonksiyonlar web sayfaları veya diğer tarafından tanımlanan. içerik komut
  • olun siteler arası XMLHttpRequest'ler
+3

Ah ne yazık. Bunu bulduğun için teşekkürler. Yalnızca krom, uzantıları çerçevesinde biraz daha fazla * güç * varsa. –

+0

lanet. Bu yüzden, daha sonra http istekleri gövdelerini engellemenin ve değiştirmenin bir yolu yok gibi görünüyor. Webrequest sadece üstbilgileri değiştirmeyi ve talep etmeyi desteklemediğinden beri ... – K2xL

7

Chrome'un içerik S rağmen crip "izole bir dünyada" yaşıyor, sen istediğin şeylere benzer bir şeyi başarabilirsin. kavramının bir kanıtı olarak

, ben TamperMonkey Chrome Eklentisini kullanılmış ve bu senaryoyu oluşturdunuz: incelemek Eğer

var secret = 'the brown fox'; 

var secretPrinter = setInterval(function() { 
    console.log(secret); 
}, 1000); 

:

// ==UserScript== 
// @name   Modify Secret 
// @namespace http://your.homepage/ 
// @version  0.1 
// @description enter something useful 
// @author  You 
// @match  https://*/* 
// @match  http://*/* 
// @grant  none 
// ==/UserScript== 

console.log(secret); 

var el = document.createElement('script'); 
el.innerHTML = 'secret = "the blue dog"'; 
document.body.appendChild(el); 

Sonra bu javascript yayınlanmıyor http://s.codepen.io/boomerang/745009c49e60974cf9dba1b070f27d111458064000840/index.html gittiğiniz konsol, bir kişi sürekli basılı olan 'kahverengi tilki' görmeyi bekler, ama bunun yerine 'mavi köpek' var.


Genel olarak, ben tarayıcı başarmaya çalıştığı güvenlik kavramı içerik komut dosyasının ortamı erişmesini sayfanın ortamını engellemek için olduğunu düşünüyorum. Farkında olursanız, bir Tarayıcı Uzantısı ile böyle bir şeyi başarabilmeniz şaşırtıcı değildir.

+1

Nice find !! Bu kabul edilen cevap olmalı. –

+0

Teşekkürler! Sitemden önceki bir sayfayı kaldırmış olduğumdan beri URL'yi güncelledim. –

İlgili konular