36

두 개의 자율 사용자 스크립트간에 데이터를 전달해야합니다. 이상적으로는 unsafeWindow 개체를 건드리지 않아도됩니다. 사용자 지정 이벤트를 사용하는 것이 최선의 방법이라고 생각했습니다. 이벤트가 userscript에 의해 발사 될 때사용자 지정 이벤트를 통해 추가 데이터를 전달할 수있는 방법이 있습니까?

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

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

이 표준 자바 스크립트 환경에서 하나의 userscript 내에서 잘 작동하지만 : 나는 (우리가 예를 목적으로 MSIE 모델을 무시하자)이 같은 생각 그것의 외부 또는 다른 사용자 스크립트 내에서 잡히면, undefined은 크롬입니다. 나는 단지 전달 된 데이터를 sessionStorage에 저장할 수 있다고 생각하지만, 완벽하지는 않습니다. 다른 멋진 해결책들, 여러분, 신사 숙녀 여러분? 완벽 필요와 달성 될 수있다, 나는 그것을 느낄 수있다.

+0

은'구글 - 크롬 - extension' 태그 elegance''보다 더 적합하다. ('새로운 맞춤 이벤트 다음과 같은 '디테일'에 의해 키드 CustomEventInit 해시에서 데이터를 전달 –

+0

좋은 생각 :) – Witiko

답변

55

예, 당신은 MessageEvent 또는 CustomEvent를 사용할 수 있습니다.

사용 예제 : 속성과 자세한 내용과

//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

는'새로운 맞춤 이벤트 ('EVENTNAME')'생성자를 사용하여이를 달성하기 위해)이 적합한 고객을 유치한다 'eventName', { 'detail': data});'. –

+6

은 'initCustomEvent'와 유사합니다. – scrutari

+2

데이터가 직렬화 되었습니까? 거기에 HTML 요소에 대한 참조를 넣을 수 있습니까? –

6

패스 개체 :

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는 "바"} 그것은 자바 스크립트 해시입니다. JSON에는 매우 엄격한 규칙이 있습니다 (키는 큰 따옴표로 묶어야 함). 동일한 JS가 유효한 JSON 일지라도 JS 내에서 사용하는 것은 JS이며 JSON이 아닙니다. 제 생각에는 유효한 JSON이고 문자열로 저장되어있는 경우 JSON 일뿐입니다. JS 코드 일 때는 JSON처럼 보이는 자바 스크립트 데이터 구조 일뿐입니다. –

+0

해시와 Json 객체의 정확한 차이점은 무엇입니까? 내가 아는 한 해시를 만들 수 있습니다. var xyz = {}; xyz [ 'index1'] = "myvalue1"; xyz [ 'index2'] = "myvalue2"; –

+1

@SujalMandal - JSON이라는 용어를 전혀 사용하지 않는다는 차이점이 있습니다. 그건 JSON이 아니라 자바 스크립트 객체 리터럴 일뿐입니다. JSON은 ** 문자열 ** 형식으로 프로그램/상점 데이터간에 데이터를 전송하는 데 사용되며 구문은 JavaScript 객체를 기반으로합니다. –

관련 문제