36

İki otonom kullanıcı listesi arasında geçiş yapmam gerekiyor - ideal olarak unsafeWindow nesnesine dokunmak - ve özel etkinlikleri kullanmanın yolu olacağını düşündüm. Olay userscript tarafından ateşlendiğindeÖzel olaylarla ek veri aktarmanın herhangi bir yolu var mı?

addEventListener("customEvent", function(e) { 
    alert(e.data); 
}); 

var custom = document.createEvent("HTMLEvents"); 
custom.initEvent("customEvent", true, true); 
custom.data = "Some data..."; 
dispatchEvent(custom); 

Bu standardın javascript ortamında ve bir userscript içinde güzel çalışır, ancak: I (bize örnek amacıyla MSIE modeli göz ardı edelim) böyle bir şey düşündüm ve bunun dışında veya başka bir kullanıcı içinde yakalanmış, data özelliği, kromda undefined özelliğindedir. Sanırım geçen verileri sessionStorage'a kaydedebiliyordum, ama sorunsuz olmaktan uzak. Başka zarif çözümler, baylar ve nazik kadın? Mükemmellik ihtiyacı ve başarılabilir, bunu hissedebiliyorum.

+0

'google-krom extension' etiket elegance'' daha iyi uyum sağlar. Doğru kitleyi çekecektir;) –

+0

iyi düşünme :) – Witiko

cevap

55

Evet, MessageEvent veya CustomEvent'u kullanabilirsiniz.

Örnek kullanım: nitelikleri olarak daha fazla bilgi içeren

//Listen for the event 
window.addEventListener("MyEventType", function(evt) { 
    alert(evt.detail); 
}, false); 

//Dispatch an event 
var evt = new CustomEvent("MyEventType", {detail: "Any Object Here"}); 
window.dispatchEvent(evt); 
+21

Yeni CustomEvent ('eventName') 'kurucusunu kullanarak bunu elde etmek için, verileri aşağıdaki gibi 'detay' yazan bir CustomEventInit hashta geçirin:' new CustomEvent (yeni CustomEvent) 'eventName', {'detail': data}); '. –

+6

, initCustomEvent öğesinin kullanımdan kaldırıldığını düşünüyor – scrutari

+2

Bu veriler seri hale getiriliyor mu? Bir HTML öğesine bir referans yazabilir miyim? 'CustomEvent' kullanmak için –

6

geçiş nesnesi:

var event = new CustomEvent('build', { 'detail1': "something", detail2: "something else" }); 

function eventHandler(e) { 
    log('detail1: ' + e.detail.detail1); 
    log('detail2: ' + e.detail.detail2); 
} 

https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events

+9

JSON: {foo: "bar"} Bu bir JavaScript karma'sıdır. JSON'un çok katı kuralları vardır (anahtarlar çift tırnak içine alınmalıdır) ve aynı JS geçerli JSON olduğunda bile, JS içinde kullanmak sadece JS'dir ve JSON değildir. Benim görüşüme göre, geçerli JSON ise sadece JSON ve bir dize olarak saklanır. JS kodu olduğunda, JSON gibi görünen bir JavaScript veri yapısıdır. –

+0

Karma ve Json nesneleri arasındaki kesin farklar nelerdir? Bildiğim kadarıyla, var xyz = {}; xyz ['index1'] = "myvalue1"; xyz ['index2'] = "myvalue2"; –

+1

@SujalMandal - fark, JSON terimini doğru kullanmıyor olmasıdır. Bu JSON değil, bu sadece bir javascript nesnesi literal. JSON, programlar/mağaza verileri arasında veri aktarımı için kullanılan bir ** dizgi ** biçimidir ve sözdizimi büyük ölçüde javascript nesnelerine dayanır. –

İlgili konular