JavaScript library for exchange events, data and tasks between browser tabs.
Подробный мануал на русском на Хабрахабре - если кто-нибудь переведёт всю эту лабуду на английский, буду очень признателен. :)
Options:
__SE__.Name - This tab name.
__SE__.SelfExecution - Self-emitting by not _Global events.
__SE__.Sync - Background worker interval in ms.
__SE__.TabTimeoutMult - Ctrl+F: "Inner relative values".
__SE__.SLockTimeoutMult - Ctrl+F: "Inner relative values".
Methods:
__SE__.clear( void );
__SE__.getActiveTabs( void );
__SE__.addEventListener ( Type , Listener [, TabName ] );
__SE__.hasEventListener ( Type [, Listener , TabName , Callback ] );
__SE__.removeEventListener ( Type [, Listener , TabName , Callback ] );
__SE__.dispatchEvent ( Type [, Data , TabName ] );
Constants:
__SE__.GID - global events and listeners target ("TabName") identifier.
Default global events:
tabOpened - { Name , ID } as GlobalEvent tabName: __SE__.GID
tabClosed - { Name , ID } as GlobalEvent tabName: __SE__.GID
tabNameChanged - { Name , ID , OldName } as GlobalEvent tabName: __SE__.GID
Inner relative values:
- Tab ping timeout expression: __SE__.Sync * __SE__.ActiveTabsCount * __SE__.TabTimeoutMult
- Storage lock timeout expression: __SE__.Sync * __SE__.SLockTimeoutMult
Set local event listeners to default global events:
var testFunction = function( data ){ console.log( 'Local __SE__ event called on tabOpened.' ); console.dir( data ); }; __SE__.addEventListener( 'tabOpened' , testFunction ); var testFunctionB = function( data ){ console.log( 'Local __SE__ event called on tabClosed.' ); console.dir( data ); }; __SE__.addEventListener( 'tabClosed' , testFunctionB );
Local add/has/remove listeners:
var testFunction = function( data ){ console.log( 'Local __SE__ event called on TestEvent.' ); console.dir( data ); }; var testResult = __SE__.addEventListener( 'TestEvent' , testFunction ); console.log( 'Listener attachment result: ' + testResult );console.log( 'Tests:' ); console.log( 'hasEventListener():' ); console.log( 'Expected "false", recieved: ' + __SE__.hasEventListener( 'Empty' , testFunction ) ); console.log( 'Expected "false", recieved: ' + __SE__.hasEventListener( 'Empty' , false ) ); console.log( 'Expected "true", recieved: ' + __SE__.hasEventListener( 'TestEvent' , testFunction ) ); console.log( 'Expected "true", recieved: ' + __SE__.hasEventListener( 'TestEvent' , false ) ); console.log( 'removeEventListener():' ); console.log( 'Expected "true", recieved: ' + __SE__.removeEventListener( 'Empty' , testFunction ) ); console.log( 'Expected "true", recieved: ' + __SE__.removeEventListener( 'TestEvent' , testFunction ) ); console.log( 'Expected "true", recieved: ' + __SE__.removeEventListener( 'TestEvent' , testFunction ) );
Set local event listeners to tab-specified events:
// part 1 (tab 1) var testFunction = function( data ){ console.log( 'Local __SE__ event called on TestEvent.' ); console.dir( data ); }; __SE__.addEventListener( 'TestEvent' , testFunction ); __SE__.setName( 'Reciever' );// part 2 (tab 2-3-4-n) __SE__.dispatchEvent( 'TestEvent' , { Data: 'some data' } , 'UndefinedTab' ); // false, because send to 'UndefinedTab' __SE__.dispatchEvent( 'TestEvent' , { Data: 'some data' } ); // true, because '_Global' __SE__.dispatchEvent( 'TestEvent' , { Data: 'some data' } , 'Reciever' ); // true, because tab-specified
Set shared event listeners to tab-specified events:
// part 1 (tab 1) var testFunction = function( data ){ console.log( 'Shared __SE__ listener called on TestEvent.' ); console.dir( data ); }; __SE__.addEventListener( 'TestEvent' , testFunction , 'Reciever' ); __SE__.addEventListener( 'TestEvent' , testFunction , 'Tester' );// part 2 (tab 2) __SE__.setName( 'Reciever' ); // part 3 (tab 3) __SE__.setName( 'Tester' ); // part 4 (tab 4) __SE__.dispatchEvent( 'TestEvent' , { Data: 'some data' } , 'UndefinedTab' ); // TAB2 && TAB3: false, because send to 'UndefinedTab' __SE__.dispatchEvent( 'TestEvent' , { Data: 'some data' } ); // TAB2 && TAB3: true, because '_Global' __SE__.dispatchEvent( 'TestEvent' , { Data: 'some data' } , 'Reciever' ); // TAB2: true, because specified; TAB3: false __SE__.dispatchEvent( 'TestEvent' , { Data: 'some data' } , 'Tester' ); // TAB3: true, because specified; TAB2: false
Shared events hasEventListener:
// part 1 (tab 1) var testFunction = function( data ){ console.log( 'Shared __SE__ listener called on TestEvent.' ); console.dir( data ); }; __SE__.addEventListener( 'TestEvent' , testFunction , 'Reciever' );// part 2 (tab 1) var Callback = function( result ){ if ( result ){ console.log( 'TRUE! Listener exists.' ); } else { console.log( 'FALSE! Listener not exists.' ); } } __SE__.hasEventListener( 'TestEvent' , testFunction , 'Reciever' , Callback ); // true __SE__.hasEventListener( 'TestEventB' , testFunction , 'Reciever' , Callback ); // false __SE__.hasEventListener( 'TestEvent' , testFunction , false , Callback ); // true __SE__.hasEventListener( 'TestEventB' , testFunction , false , Callback ); // false __SE__.hasEventListener( 'TestEvent' , false , 'Reciever' , Callback ); // true __SE__.hasEventListener( 'TestEventB' , false , 'Reciever' , Callback ); // false __SE__.hasEventListener( 'TestEvent' , false , false , Callback ); // true __SE__.hasEventListener( 'TestEventB' , false , false , Callback ); // false // part 3 (tab 2) var testFunction = function( data ){ console.log( 'Shared __SE__ listener called on TestEvent.' ); console.dir( data ); }; var Callback = function( result ){ if ( result ){ console.log( 'TRUE! Listener exists.' ); } else { console.log( 'FALSE! Listener not exists.' ); } } __SE__.hasEventListener( 'TestEvent' , testFunction , 'Reciever' , Callback ); // true __SE__.hasEventListener( 'TestEventB' , testFunction , 'Reciever' , Callback ); // false __SE__.hasEventListener( 'TestEvent' , testFunction , false , Callback ); // true __SE__.hasEventListener( 'TestEventB' , testFunction , false , Callback ); // false __SE__.hasEventListener( 'TestEvent' , false , 'Reciever' , Callback ); // true __SE__.hasEventListener( 'TestEventB' , false , 'Reciever' , Callback ); // false __SE__.hasEventListener( 'TestEvent' , false , false , Callback ); // true __SE__.hasEventListener( 'TestEventB' , false , false , Callback ); // false