איך להשתשמש במנגון שליחת הודעות בין דפים שונים ואפילו מדומיינים שונים ב - 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