لماذا لا يستطيع امتداد Chrome استخدام HTML5 postmessage للتواصل مع إطار حقنه؟

StackOverflow https://stackoverflow.com/questions/4073057

سؤال

لذلك ، لدي صفحة على Domaina ، وباستخدام امتداد Chrome ، أقوم بحقن بعض JavaScript الذي يدرج iframe الذي يشير إلى DomainB.

$("body").append("<iframe id='someFrame' src='http://www.domainB.com' width='300' height='800'></iframe>");

أنا أيضًا حقن بعض JavaScript في Domaina يحاول الحصول على محتوى iframe. أريد استخدام واجهة برمجة تطبيقات HTML5 postmessage عليها.

$("body").append("<a class='myLink'>Post Message</a>");
$(".myLink").click(function(){
    var frameElem = document.getElementById("someFrame"); 
    console.log("frameElem: " + frameElem); //succeeds

var contentWin = frameElem.contentWindow;
console.log("contentWin : " + contentWin); //undefined

//can't do this since contentWin is undefined: 
//contentWin.postMessage("data", "*");
});

ومع ذلك ، فإن خاصية ContentWindow غير محددة. لماذا هذا ، وكيف يمكنني الالتفاف حوله؟ إذا وضعت رمز الامتداد هذا في صفحة ويب ، فسوف يعمل بشكل جيد بنفسه.

شكرًا!

(العفو عن jQuery/JavaScript crappy

هل كانت مفيدة؟

المحلول

أعلم أنه نوع من العرجاء للإجابة على سؤالي الخاص ، لكنني فعلت المزيد من الحفر ، ووجدت خطأ تم تقديمه على Chromium لهذه المشكلة: http://code.google.com/p/chromium/issues/detail؟id=20773

لقد وجدت هذا الرابط في مجموعة ملحقات الكروم: http://groups.google.com/a/chromium.org/group/chromium-extensions/browse_thread/thread/1d4b68f0971ef190/3446a7e82848351c؟lnk=gst&q=contentwindowlowlowlowlowlowlow

نصائح أخرى

أعتقد أنه لنفس الأسباب التي تجعل البرامج النصية للمحتوى لا يمكنها الوصول إلى كائن النافذة في صفحة الأصل الخاصة بهم. نرى هذا السؤال, ، ولديه رابط إلى حل بديل.

تحتاج إلى تضمين iframe في إطار الجذر الخاص بك والذي يرسل طلبات إلى إطار العميل ، والذي يرسل بعد ذلك الأوامر إلى موقع الجذر كما هو موضح في المثال التالي. هذا هو المعروف باسم الاختراق "أحادي الاتجاه الأنابيب":http://msdn.microsoft.com/en-us/library/bb735305.aspx
alt text

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top