PageSourceSearch

https://spitalmaennedorf.ch/static/app_health/scripts/vendors/jquery.ba-postmessage.js

js spitalmaennedorf.ch collected 2026-10-04 13:47:46 UTC 8,619 bytes, 222 lines download raw bytes

1/*!
2 * jQuery postMessage - v0.5 - 9/11/2009
3 * http://benalman.com/projects/jquery-postmessage-plugin/
4 * 
5 * Copyright (c) 2009 "Cowboy" Ben Alman
6 * Dual licensed under the MIT and GPL licenses.
7 * http://benalman.com/about/license/
8 */
9
10// Script: jQuery postMessage: Cross-domain scripting goodness
11//
12// *Version: 0.5, Last updated: 9/11/2009*
13// 
14// Project Home - http://benalman.com/projects/jquery-postmessage-plugin/
15// GitHub       - http://github.com/cowboy/jquery-postmessage/
16// Source       - http://github.com/cowboy/jquery-postmessage/raw/master/jquery.ba-postmessage.js
17// (Minified)   - http://github.com/cowboy/jquery-postmessage/raw/master/jquery.ba-postmessage.min.js (0.9kb)
18// 
19// About: License
20// 
21// Copyright (c) 2009 "Cowboy" Ben Alman,
22// Dual licensed under the MIT and GPL licenses.
23// http://benalman.com/about/license/
24// 
25// About: Examples
26// 
27// This working example, complete with fully commented code, illustrates one
28// way in which this plugin can be used.
29// 
30// Iframe resizing - http://benalman.com/code/projects/jquery-postmessage/examples/iframe/
31// 
32// About: Support and Testing
33// 
34// Information about what version or versions of jQuery this plugin has been
35// tested with and what browsers it has been tested in.
36// 
37// jQuery Versions - 1.3.2
38// Browsers Tested - Internet Explorer 6-8, Firefox 3, Safari 3-4, Chrome, Opera 9.
39// 
40// About: Release History
41// 
42// 0.5 - (9/11/2009) Improved cache-busting
43// 0.4 - (8/25/2009) Initial release
44
45(function($){
46  '$:nomunge'; // Used by YUI compressor.
47  
48  // A few vars used in non-awesome browsers.
49  var interval_id,
50    last_hash,
51    cache_bust = 1,
52    
53    // A var used in awesome browsers.
54    rm_callback,
55    
56    // A few convenient shortcuts.
57    window = this,
58    FALSE = !1,
59    
60    // Reused internal strings.
61    postMessage = 'postMessage',
62    addEventListener = 'addEventListener',
63    
64    p_receiveMessage,
65    
66    // I couldn't get window.postMessage to actually work in Opera 9.64!
67    has_postMessage = window[postMessage] && !$.browser.opera;
68  
69  // Method: jQuery.postMessage
70  // 
71  // This method will call window.postMessage if available, setting the
72  // targetOrigin parameter to the base of the target_url parameter for maximum
73  // security in browsers that support it. If window.postMessage is not available,
74  // the target window's location.hash will be used to pass the message. If an
75  // object is passed as the message param, it will be serialized into a string
76  // using the jQuery.param method.
77  // 
78  // Usage:
79  // 
80  // > jQuery.postMessage( message, target_url [, target ] );
81  // 
82  // Arguments:
83  // 
84  //  message - (String) A message to be passed to the other frame.
85  //  message - (Object) An object to be serialized into a params string, using
86  //    the jQuery.param method.
87  //  target_url - (String) The URL of the other frame this window is
88  //    attempting to communicate with. This must be the exact URL (including
89  //    any query string) of the other window for this script to work in
90  //    browsers that don't support window.postMessage.
91  //  target - (Object) A reference to the other frame this window is
92  //    attempting to communicate with. If omitted, defaults to `parent`.
93  // 
94  // Returns:
95  // 
96  //  Nothing.
97  
98  $[postMessage] = function( message, target_url, target ) {
99    if ( !target_url ) { return; }
100    
101    // Serialize the message if not a string. Note that this is the only real
102    // jQuery dependency for this script. If removed, this script could be
103    // written as very basic JavaScript.
104    message = typeof message === 'string' ? message : $.param( message );
105    
106    // Default to parent if unspecified.
107    target = target || parent;
108    
109    if ( has_postMessage ) {
110      // The browser supports window.postMessage, so call it with a targetOrigin
111      // set appropriately, based on the target_url parameter.
112      target[postMessage]( message, target_url.replace( /([^:]+:\/\/[^\/]+).*/, '$1' ) );
113      
114    } else if ( target_url ) {
115      // The browser does not support window.postMessage, so set the location
116      // of the target to target_url#message. A bit ugly, but it works! A cache
117      // bust parameter is added to ensure that repeat messages trigger the
118      // callback.
119      target.location = target_url.replace( /#.*$/, '' ) + '#' + (+new Date) + (cache_bust++) + '&' + message;
120    }
121  };
122  
123  // Method: jQuery.receiveMessage
124  // 
125  // Register a single callback for either a window.postMessage call, if
126  // supported, or if unsupported, for any change in the current window
127  // location.hash. If window.postMessage is supported and source_origin is
128  // specified, the source window will be checked against this for maximum
129  // security. If window.postMessage is unsupported, a polling loop will be
130  // started to watch for changes to the location.hash.
131  // 
132  // Note that for simplicity's sake, only a single callback can be registered
133  // at one time. Passing no params will unbind this event (or stop the polling
134  // loop), and calling this method a second time with another callback will
135  // unbind the event (or stop the polling loop) first, before binding the new
136  // callback.
137  // 
138  // Also note that if window.postMessage is available, the optional
139  // source_origin param will be used to test the event.origin property. From
140  // the MDC window.postMessage docs: This string is the concatenation of the
141  // protocol and "://", the host name if one exists, and ":" followed by a port
142  // number if a port is present and differs from the default port for the given
143  // protocol. Examples of typical origins are https://example.org (implying
144  // port 443), http://example.net (implying port 80), and http://example.com:8080.
145  // 
146  // Usage:
147  // 
148  // > jQuery.receiveMessage( callback [, source_origin ] [, delay ] );
149  // 
150  // Arguments:
151  // 
152  //  callback - (Function) This callback will execute whenever a <jQuery.postMessage>
153  //    message is received, provided the source_origin matches. If callback is
154  //    omitted, any existing receiveMessage event bind or polling loop will be
155  //    canceled.
156  //  source_origin - (String) If window.postMessage is available and this value
157  //    is not equal to the event.origin property, the callback will not be
158  //    called.
159  //  source_origin - (Function) If window.postMessage is available and this
160  //    function returns false when passed the event.origin property, the
161  //    callback will not be called.
162  //  delay - (Number) An optional zero-or-greater delay in milliseconds at
163  //    which the polling loop will execute (for browser that don't support
164  //    window.postMessage). If omitted, defaults to 100.
165  // 
166  // Returns:
167  // 
168  //  Nothing!
169  
170  $.receiveMessage = p_receiveMessage = function( callback, source_origin, delay ) {
171    if ( has_postMessage ) {
172      // Since the browser supports window.postMessage, the callback will be
173      // bound to the actual event associated with window.postMessage.
174      
175      if ( callback ) {
176        // Unbind an existing callback if it exists.
177        rm_callback && p_receiveMessage();
178        
179        // Bind the callback. A reference to the callback is stored for ease of
180        // unbinding.
181        rm_callback = function(e) {
182          if ( ( typeof source_origin === 'string' && e.origin !== source_origin )
183            || ( $.isFunction( source_origin ) && source_origin( e.origin ) === FALSE ) ) {
184            return FALSE;
185          }
186          callback( e );
187        };
188      }
189      
190      if ( window[addEventListener] ) {
191        window[ callback ? addEventListener : 'removeEventListener' ]( 'message', rm_callback, FALSE );
192      } else {
193        window[ callback ? 'attachEvent' : 'detachEvent' ]( 'onmessage', rm_callback );
194      }
195      
196    } else {
197      // Since the browser sucks, a polling loop will be started, and the
198      // callback will be called whenever the location.hash changes.
199      
200      interval_id && clearInterval( interval_id );
201      interval_id = null;
202      
203      if ( callback ) {
204        delay = typeof source_origin === 'number'
205          ? source_origin
206          : typeof delay === 'number'
207            ? delay
208            : 100;
209        
210        interval_id = setInterval(function(){
211          var hash = document.location.hash,
212            re = /^#?\d+&/;
213          if ( hash !== last_hash && re.test( hash ) ) {
214            last_hash = hash;
215            callback({ data: hash.replace( re, '' ) });
216          }
217        }, delay );
218      }
219    }
220  };
221  
222})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.