Google Chrome tarayıcı için bir uzantı geliştiriyorum. Geçerli sekme DOM nesnesine "popup.html" sayfasından nasıl erişileceğini anlayamadım. herhangi bir öneriniz var mı?Geçerli Sekme DOM nesnesine erişme "popup.html"?
cevap
Varsayılan olarak, popup.js/popup.html içinde "belge" nesnesi, uzantının yalnızca açılır penceresinin belgesine başvurur. Belirli bir sekme için DOM'yi almak için (örneğin şu an aktif sekmesi), content scripts communications'u kullanmanız gerekir. Örneğin size böyle bir şey yapmak popup.html yüzden, popup aracılığıyla İçerik komut için extension bir istek göndermek gerekir: İçerik komut Şimdi
chrome.tabs.getSelected(null, function(tab) {
// Send a request to the content script.
chrome.tabs.sendRequest(tab.id, {action: "getDOM"}, function(response) {
console.log(response.dom);
});
});
, biz gelen listen for those events gerek uzatma, bu nedenle bazı dosyada biz
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.action == "getDOM")
sendResponse({dom: "The dom that you want to get"});
else
sendResponse({}); // Send nothing..
});
Şimdi içerik komut dosyası ve sekme iznini içerecek şekilde kurulum sizin manifest unutmayın dom.js
adını verdi.Bu yanıt en son API ile çalışmıyor gibi görünüyor. Bu çalışan bir örnek.
popup.js:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
var tab = tabs[0];
console.log(tab.url, tab.title);
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendMessage(tab.id, {greeting: "hello"}, function(msg) {
msg = msg || {};
console.log('onResponse', msg.farewell);
});
});
});
getDescription.js: manifest.json ait
window.onload = function() {
chrome.runtime.onMessage.addListener(function(msg, _, sendResponse) {
console.log('onMessage', msg);
if (msg.greeting == "hello") {
sendResponse({farewell: "goodbye"});
} else{
sendResponse({});
}
});
};
ilgili bölümleri:
{
"permissions": [
"tabs"
],
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*"],
"js": ["getDescription.js"]
}
]
}
Bu son düzeltmedir:
popup.js
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
console.log(response.farewell);
});
});
(Not: Yukarıdaki console.log (response.farewell) popup.html için değil, mevcut sekmesi)
contentscript.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.greeting == "hello")
sendResponse({farewell: "goodbye"});
});
- 1. DataFrame nesnesine DataFrame nesnesine erişme yöntemi çağrısı
- 2. Geçerli sekme sayfasını vurgula?
- 3. Selenium ile bir DOM nesnesine erişebilir miyim?
- 4. Tıklama etkinliğinde D3 SVG nesnesine erişme
- 5. Özel JSP etiketlerinden Request nesnesine erişme
- 6. Angular ui-takvim'de fullcalendar nesnesine erişme
- 7. Tüm Etkinlikler İçinde GoogleApiClient nesnesine erişme
- 8. passport.js içinde serializeUser işlevi istek nesnesine erişme
- 9. Geçerli değişikliklere CustomChange uygulamalarından erişme
- 10. Gidonlarda geçerli yineleme nesnesine nasıl başvurulur?
- 11. Genel olarak geçerli HttpRequestMessage nesnesine nasıl erişilir?
- 12. Bir Chrome Uzantısının Debug popup.html?
- 13. Geçerli seçimi içeren DOM öğesini nasıl alabilirim?
- 14. Geçerli Vue bileşeninin DOM öğesi nasıl alınır?
- 15. Geçerli sekme düzeninde tıklama olayının nasıl ayarlanacağı
- 16. Geçerli sayfanın javascript sayfasına erişme [no ajax]
- 17. jQuery nesnesinden jQuery nesnesine (DOM yerine) jQuery dizisini döndürerek döndürme
- 18. nasıl DOM, PHP'de bir img nesnesine sınıf eklenir? İşte
- 19. Tek jQuery nesnesine birden fazla jQuery/DOM öğesi ekleme
- 20. Uygulama geniş değişkenlerini depolamak için ASP.Net MVC'deki "Uygulama" nesnesine erişme
- 21. Model nesnesine özel bir HTML yardımcı aracında erişme
- 22. Firebug: DOM Denetçisinde yalnızca "baktığınız" bir nesneye erişme
- 23. AngularJS - Angular dışında bir DOM öğesinin özniteliklerine erişme
- 24. Geçerli nesnenin Iterator tarafından sonraki nesnesine kopya değeri
- 25. AngularJS denetleyicisinde geçerli kapsam dom elementini nasıl alabilirim?
- 26. DOM
- 27. Geçerli sekme url'yi arka plan komut dosyasında chrome uzantısına getir
- 28. Bir Sekme Çubuğu Denetleyicisini geçerli Uygulama Akışı'na Programsal Olarak Ekleme
- 29. sekme
- 30. Geçerli sitedeki özel symfony2 kısıtlayıcı geçerlilik denetleyicisine erişme
DOM, Document Object Model ile demek istiyorum ... teşekkürler –
Evet, örneğimde size gösterdiğim şey, Chrome Uzantıları'nda yapılan senkronize mesajlaşmadır. "Almak istediğiniz dom" bir String döndürdüm, ancak gerçekte istediğiniz herhangi bir DOM'yi döndürebilirsiniz. Eğer vücuttaki her şeyi almak istiyorsanız "sendResponse" ({dom: document.getElementsByTagName ("body") [0]}); Yukarıdaki örnek çalışma –
mu? AFAIK sendikası cevabı domu dom nesnesiyle dominant hale getirecek ve dom nesnesinin dairesel yapısından dolayı bir hataya neden olacaktır. –