আপনি কীভাবে ডোমেনগুলিতে উইন্ডো.পস্টম্যাসেজ ব্যবহার করবেন?


89

এটি উইন্ডোটির পয়েন্টের মতো বলে মনে হয় pপোস্টমেসেজটি বিভিন্ন ডোমেনগুলিতে হোস্ট করা উইন্ডো / ফ্রেমগুলির মধ্যে নিরাপদ যোগাযোগের অনুমতি দেওয়া, তবে ক্রোমে এটি আসলে অনুমতি দেয় বলে মনে হয় না ।

দৃশ্যটি এখানে:

  1. srcএ ডোমেনের একটি পৃষ্ঠায় একটি <iframe> ( ডোমেন বি * এর সাথে ) এম্বেড করুন
  2. <iframe> বেশিরভাগই একটি <script> ট্যাগ হয়ে শেষ হয়, যার মৃত্যুদন্ডের শেষে ...
  3. আমি উইন্ডো.পোস্টমেসেজ ( কিছু_ডাটা , পৃষ্ঠা_অন_এ ) কল করি

<iframe> সুনির্দিষ্টভাবে ডোমেন বি এর প্রসঙ্গে এবং আমি নিশ্চিত করেছি যে <iframe> এ এম্বেড করা জাভাস্ক্রিপ্টটি সঠিকভাবে সম্পাদন করে এবং postMessageসঠিক মান সহ কল করে।

আমি ক্রোমে এই ত্রুটি বার্তাটি পেয়েছি:

বার্তা পোস্ট করতে অক্ষম একজন । প্রাপকের উত্স বি

এ কোডটি এখানে যা পৃষ্ঠায় একটি বার্তা ইভেন্ট শ্রোতাদের রেজিস্টার করে:

window.addEventListener(
  "message",
  function (event) {
    // Do something
  },
  false);

আমি ফোন করার চেষ্টাও করেছি window.postMessage(some_data, '*'), তবে যা কিছু ঘটে তা ত্রুটি দমন করে।

আমি কি এখানে মাত্র পয়েন্টটি মিস করছি, উইন্ডো.পস্টম্যাসেজ (...) এর জন্য নয়? বা আমি কি এটা ভয়াবহভাবে ভুল করছি?

* মাইম-টাইপ পাঠ্য / এইচটিএমএল, যা এটি অবশ্যই রয়ে যাবে।


4
আপনি সম্ভবত এটি সম্পর্কে অবগত রয়েছেন, তবে এমডিসির পোস্টমেসেজের উপর একটি দুর্দান্ত রুনডাউন রয়েছে: ডেভেলপার.মোজিলা.আর.ইন / ডম / উইন্ডো.পোস্টমেসেজ এফএফ বাস্তবায়নের জন্য স্পষ্টতই, তবে সম্ভবত সেখানে এমন কিছু আছে যা ব্যাখ্যা করে যে এটি কেন কাজ করে না।
পেক্কা

উত্তর:


79

এখানে একটি উদাহরণ যা ক্রোম 5.0.375.125 এ কাজ করে।

পৃষ্ঠা পৃষ্ঠা (iframe সামগ্রী):

<html>
    <head></head>
    <body>
        <script>
            top.postMessage('hello', 'A');
        </script>
    </body>
</html>

এখানে top.postMessageবা parent.postMessageনা ব্যবহার নোট window.postMessageকরুন

পৃষ্ঠাটি:

<html>
<head></head>
<body>
    <iframe src="B"></iframe>
    <script>
        window.addEventListener( "message",
          function (e) {
                if(e.origin !== 'B'){ return; } 
                alert(e.data);
          },
          false);
    </script>
</body>
</html>

এ এবং বি অবশ্যই কিছু একটা হতে হবে http://domain.com

সম্পাদনা:

অন্য একটি প্রশ্ন থেকে , এটি সঠিকভাবে কাজ করার /জন্য ডোমেনগুলি (এ এবং বি) এর অবশ্যই একটি থাকতে হবে postMessage


4
পৃষ্ঠা এ বার্তাটির উত্স পরীক্ষা করে, উত্সটি কোনও '' 'পিছনে থাকবে না। পৃষ্ঠা বি কোনও অনুসরণ / '/' নির্দিষ্ট করে কিনা তা মনে হয় না। অন্যটি লক্ষ্য করার বিষয়টি হ'ল ইউআরএলগুলি নিখুঁত ইউআরএল হওয়া উচিত।
ক্যাচ 22

4
এই উত্তরটি আমাকে কিছুটা বিভ্রান্ত করে ফেলেছে এবং এখনও একটি উত্তর অনুসন্ধান করছে। blog.teamtreehouse.com/cross-domain-messaging-with- পোষ্টম্যাসে পোস্টম্যাসেজের খুব ভাল ব্যাখ্যা রয়েছে। গুরুত্বপূর্ণটি হ'ল বার্তা প্রেরক প্রাপকের ডোমেনটি জানেন। উপরের উদাহরণে, এ এবং বি একই ডোমেন হতে হবে না, তবে খ অবশ্যই জানতে হবে যে ডোমেইনটি এ দ্বারা ব্যবহৃত হয়
গ্রেগ বোগুমিল

7
প্রশ্ন ক্রস ডোমেন সম্পর্কে is গৃহীত উত্তর একই ডোমেন সম্পর্কে।
স্ট্যাকুলার

@ স্ট্যাকুলার, ঠিক না এ এবং বি যে কোনও ডোমেইন হতে পারে। যে থাকার প্রধান কারণ নেইpostMessage
মাইক

4
+1 আমরা নিশ্চিত করতে চাই যে এই সমাধানটি আমাদের ক্ষেত্রে কাজ করেছে। আমাদের কাছে একটি পৃষ্ঠা রয়েছে যা বিভিন্ন ডোমেনের একটি আইফ্রেম ধারণ করে । Chrome যে ব্রাউজারে এই কেবল কাজই, ফায়ারফক্স হিসেবে আমরা ব্যবহার করতে হবে দয়া করে নোট করুন হতে window.parent.postMessage পরিবর্তে শীর্ষ । যদিও আমরা জানি না এটি অন্য কোনও ব্রাউজারে প্রয়োগ করা যায় কিনা।
rahmatns

24

লোড হওয়ার পরে আপনার ফ্রেম থেকে পিতামাতার কাছে একটি বার্তা পোস্ট করা উচিত।

ফ্রেম স্ক্রিপ্ট:

$(document).ready(function() {
    window.parent.postMessage("I'm loaded", "*");
});

এবং এটি পিতামাতার মধ্যে শুনুন:

function listenMessage(msg) {
    alert(msg);
}

if (window.addEventListener) {
    window.addEventListener("message", listenMessage, false);
} else {
    window.attachEvent("onmessage", listenMessage);
}

আরও তথ্যের জন্য এই লিঙ্কটি ব্যবহার করুন: http://en.wikedia.org/wiki/Web_Messaging


2

সম্ভবত আপনি মাইডোমেন.কম থেকে আপনার ডেটা www.mydomain.com এ প্রেরণ করার চেষ্টা করছেন বা বিপরীত দিকে লক্ষ্য করুন, আপনি "www" মিস করেছেন। http://mydomain.com এবং http://www.mydomain.com জাভাস্ক্রিপ্টের বিভিন্ন ডোমেন।


4
একটি প্রকল্পে আমি করছি, আমি ব্যবহার করছি file:/// স্থানীয় ফাইল সিস্টেম থেকে কেবলমাত্র সামগ্রীতে টান দেওয়ার সময় কি ডোমেন ত্রুটি পাওয়া সম্ভব?
জ্যাকসনক্র
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.