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


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.