DCSIMG
Cross-document Messaging (CDM) in IE8 - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

Cross-document Messaging (CDM) in IE8

איך להשתשמש במנגון שליחת הודעות בין דפים שונים ואפילו מדומיינים שונים ב - IE8

 
 
בהמשך לפוסטים על IE8 נראה הפעם כיצד לשלוח הודעות בין דפים שונים, בתנאי שהם יושבים באותו עמוד מארח (כלומר בתוך IFrame).
 
 
קוד של דף A:
 

<input type="button" value="Send" onclick="Send()" />

<iframe src="CDR2.aspx"></iframe>

 

function Send() {

    var o = document.getElementsByTagName('iframe')[0];

    o.contentWindow.postMessage("Hello World", "*");

}

 
קוד של דף B:
 

window.attachEvent('onmessage', function(e) {

    document.writeln(e.data);

});

 
 
מה בעצם עשינו כאן.
דף A מכיל בתוכו את דף B ולכן אפשר להפעיל את מתודות postMessage על דף B שהוא מקבל שני פרמטרים.
 
דף A:
1. תוכן ההודעה (לפי ההגדרות זה אמור להיות הודעה טקסטואלית)
2. למי אנחנו שולחים את ההודעה. (לפי ההגדרות זה פרמטר אופציונאלי ולא לכתוב כלום זה כמו לכתוב *)
 
דף B:
נרשם ל - onmessage ומדפיס את התוכן של ההודעה.
 
 
נקודות מעניינות.
  • זה עובד רק על iframe בתוך העמוד ואי אפשר לשלוח הודעות לחלונות שיש לנו מצביע אליהם (לדוגמא, אם פתחנו popup) במדה וננסה בכל זאת לשלוח הודעה, נקבל את השגיאה No such interface supported
  • לפי ההגדרה הפרמטר השני הינו אופציונאלי אבל בפועל אם לא נשלח ערך נעוף עם השגיאה "Invalid Arguments"
  • אפשר להרשם ל - onmessage בעזרת attachEvent ולא ברישום רגיל - כלומר הצורה הזאת
 

window.onmessage = function(e) {

}

תעבוד ונגיע לאירוע - אבל e יהיה מוגדר כ - undefine
פורסם: May 27 2010, 10:11 AM by Shlomo | with no comments
תגים:, , ,
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 2 and 2 and type the answer here:


Enter the numbers above: