'ডোমউইন্ডো'-তে' পোস্টম্যাসেজ 'কার্যকর করতে ব্যর্থ: https://www.youtube.com! == http: // লোকালহোস্ট: 9000


166

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

Failed to execute 'postMessage' on 'DOMWindow': The target origin provided
('https://www.youtube.com') does not match the recipient window's origin 
('http://localhost:9000').

আমি অন্যান্য অনুরূপ সমস্যাগুলি দেখেছি যেখানে লক্ষ্য উত্স http://www.youtube.comএবং প্রাপক উত্স https://www.youtube.com, তবে লক্ষ্য যেখানে https://www.youtube.comএবং উত্স সেখানে আমার মতো আর কোনওটি নেই http://localhost:9000

  1. আমি সমস্যা পাই না। সমস্যাটা কি?
  2. আমি কীভাবে এটি ঠিক করতে পারি?


4
আমারও একই সমস্যা ছিল এবং @ ক্রিসফ্র্যাঙ্কলিনের নীচের ফিক্সটি এটি আমার জন্য স্থির করে; তবে সবচেয়ে বিস্ময়কর বিষয়টি হ'ল আমার সমস্যাটি সহ, আমি কেবল প্রায় অর্ধেক সময় ত্রুটিটি পেয়ে যাব এবং তারপরেও ভিডিওটি লোড হবে (যদিও অন্যান্য জিনিসগুলি ভেঙে যাবে)।
ডিজিও 15

1
@ ডিগো একই সমস্যা, এটি পৃষ্ঠা লোড এ এলোমেলো ছিল। অন্য কোনও পোস্ট ম্যাসেজ করার চেষ্টা করার সময় আসল আইফ্রেমে বিষয়বস্তু পুরোপুরি প্রস্তুত না হওয়ার কারণে এটি পরিণত হয় (আমার মনে হয়)। সুতরাং এটি একটি জাতি শর্ত। এবং যদি পোস্টম্যাসেজ পরবর্তী সময়ে ঘটে থাকে (ব্যবহারকারীর ক্রিয়া), এটি ত্রুটি ছাড়াই কাজ করে।
অবিশ্বাস্য

এমনকি
গুগলেরও

উত্তর:


92

আমি বিশ্বাস করি এটি টার্গেট উত্স নিয়ে সমস্যা https। আমার সন্দেহ হয় কারণ এটি আপনার আইফ্রেম ইউআরএল httpপরিবর্তে ব্যবহার করছে https। আপনি যে এম্বেড করার চেষ্টা করছেন সেই ফাইলটির ইউআরএল পরিবর্তন করার চেষ্টা করুন https

এই ক্ষেত্রে:

'//www.youtube.com/embed/' + id + '?showinfo=0&enablejsapi=1&origin=http://localhost:9000';

হতে:

'https://www.youtube.com/embed/' + id + '?showinfo=0&enablejsapi=1&origin=http://localhost:9000';

2
যে কাজ হয়েছে বলে মনে হয়। ধন্যবাদ! তাহলে সমস্যা httpবনাম https? ডোমেনগুলি (ইউটিউব বনাম লোকালহোস্ট) আলাদা কিনা তাতে কিছু যায় আসে না? এবং লক্ষ্য উত্স বনাম প্রাপক উত্স কি? আপনি যা বলেছিলেন তা কীভাবে প্রাপকের উত্স পরিবর্তন করেছে (আমার url এখনও লোকালহোস্ট: 9000)?
অ্যাডাম জারনার 21

30
ত্রুটিটি কিছুটা বিভ্রান্তিকর। এটি চালু থাকার সাথে আসলে আপনার কোনও সম্পর্ক নেই localhost:9000। সমস্যাটি আসলে আপনি যেভাবে ইউটিউব-এপি ব্যবহার করছেন তাতে ছিল। আপনি যখন নিজের কোডটিকে এপিআই ঘোষণা করেন tag.src = "https://www.youtube.com/iframe_api";, আপনি ইউটিউবকে বলছেন যে আপনি এসএসএল ব্যবহার করতে চান। সুতরাং, আমি যে পরিবর্তনটি প্রস্তাব করেছি তা আপনাকে ভিডিওগুলির অনুরোধ করতে এসএসএল ব্যবহার করতে পরিবর্তন করেছে। ত্রুটিটি কেবল আপনাকে বলছিল যে আপনি এসএসএল এবং নন-এসএসএল কলগুলি মিশ্রিত করছেন।
ক্রিস ফ্র্যাঙ্কলিন 21

9
আমি এই ইস্যুটি জুড়ে এসেছি যখন আমি ডোমটিতে ইফ্রেমটি প্রায় সরানোর চেষ্টা করেছি। playerEl = document.querySelector('iframe#ytplayer'); anotherEl.appendChild(playerEl); // yt complains on subsequent api calls
পোস্টটি ল্যাবগুলি

1
আমি যদি ইউটিউব প্লেয়ার লোড করতে জাভাস্ক্রিপ্ট ব্যবহার করছি?
N3R4ZZuRR0

5
ইউটিউবের জন্য https: // এ পরিবর্তিত হয়েছে এবং আমার ডোমেনটি https: // এখনও আমার সমস্যার সমাধান করছে না। 'ডোমউইন্ডো'-তে' পোস্টম্যাসেজ 'চালানোতে ব্যর্থ: প্রদত্ত টার্গেট উত্স (' youtube.com ') প্রাপক উইন্ডোর উত্সের (' test.dev ') এর সাথে মেলে না ।
ভি

24

প্লেয়ারের বৈশিষ্ট্যে "origin"আপনার সাইটের URL টি দিয়ে প্যারামিটারটি যুক্ত করুন paramVars:

this.player = new window['YT'].Player('player', {
    videoId: this.mediaid,
    width:'100%',
    playerVars: { 'autoplay': 1, 'controls': 0,'autohide':1,'wmode':'opaque','origin':'http://localhost:8100' },
}

7
উত্স: উইন্ডো.লোকেশন, দেব এবং উত্পাদনের বৈশিষ্ট্যগুলিতে
জেমস বেইলি

3
@ জামেসবাাইলি window.location.origin.. window.locationএকটি অবজেক্ট।
এসিডিক 9

যেমন এপিআই ডক বলেছেন, মূল প্লেয়ারওয়ার কেবল খাঁটি আইফ্রেমে প্রয়োগের সাথেই ব্যবহৃত হয়। জেএস এপিআই এক নয়।
ড্যামিয়েন সি

1
এই সমস্ত 'ফিক্স' 2020 সালে এখানে আমাদের জন্য কাজ করে না Also ত্রুটিটি দেখানো হলে পৃষ্ঠা পৃষ্ঠাতে এটির এলোমেলোভাবে যোগ করার জন্য। এটি আমাদের সাইট এবং ইউটিউবের মধ্যে একটি রেস শর্ত।
অবিশ্বাস্য

window.location.host
লিজি

19

এটি সেট করা এটি ঠিক করেছে বলে মনে হচ্ছে:

  this$1.player = new YouTube.Player(this$1.elementId, {
    videoId: videoId,
    host: 'https://www.youtube.com',

3
এটি http (পরিবর্তে https) তৈরি করা আমার সমস্যার সমাধান করে।
টুডো

5
এটি আমার জন্য এটিও স্থির করে দিয়েছে। এছাড়াও করতে পারেন: host: `${window.location.protocol}//www.youtube.com`,
জোএল Worsham

2
এই সমস্ত 'ফিক্স' 2020 সালে এখানে আমাদের জন্য কাজ করে না Also ত্রুটিটি দেখানো হলে পৃষ্ঠা পৃষ্ঠাতে এটির এলোমেলোভাবে যোগ করার জন্য। এটি আমাদের সাইট এবং ইউটিউবের মধ্যে একটি রেস শর্ত।
অবিশ্বাস্য

8

আপনি স্থানীয় ফাইলগুলিতে জাভাস্ক্রিপ্ট সংরক্ষণ করতে পারেন:

প্রথম ফাইলটিতে player_apiএই কোডটি লিখুন:

if(!window.YT)var YT={loading:0,loaded:0};if(!window.YTConfig)var YTConfig={host:"https://www.youtube.com"};YT.loading||(YT.loading=1,function(){var o=[];YT.ready=function(n){YT.loaded?n():o.push(n)},window.onYTReady=function(){YT.loaded=1;for(var n=0;n<o.length;n++)try{o[n]()}catch(i){}},YT.setConfig=function(o){for(var n in o)o.hasOwnProperty(n)&&(YTConfig[n]=o[n])}}());

দ্বিতীয় ফাইলে, কোডটি সন্ধান করুন: this.a.contentWindow.postMessage(a,b[c]);

এবং এর সাথে প্রতিস্থাপন করুন:

if(this._skiped){
    this.a.contentWindow.postMessage(a,b[c]); 
}
this._skiped = true;

অবশ্যই, আপনি একটি ফাইলে সংযুক্ত করতে পারেন - আরও দক্ষ হবে। এটি একটি নিখুঁত সমাধান নয়, তবে এটি কার্যকর!

আমার উত্স: yt_api-concat


এটা আমার জন্য স্থির। স্থানীয়ভাবে ফাইলগুলি থাকলে আমার ব্যবহারের ক্ষেত্রে ফিট করে।
ঘন ঘন

এটি আমার পক্ষেও কাজ করেছিল, তবে কেন তা নিশ্চিত নয়। আপনি এটি ব্যাখ্যা করতে পারেন কেন এটি এটি সংশোধন করে?
jchavannes

1
আপনাকে ধন্যবাদ, দ্বিতীয় আজাক্স কলটিতে আমার প্রশ্নের জবাব দিলেন: stackoverflow.com/questions/58232081/…
ডায়োগো আলমেডা

আমার দৃষ্টিতে, লাইব্রেরির জন্য স্থানীয় ফাইল ব্যবহার করা, বিশেষত তৃতীয় পক্ষের পরিষেবা লাইব্রেরির জন্য, কোডের পক্ষে খুব খারাপ উপায়। না?
ড্যামিয়েন সি

@ ডামিয়েনসি এটি নিশ্চিত হওয়ার চেয়ে কম আদর্শ। তবে, এই থ্রেডে থাকা অন্যান্য সমস্ত "ফিক্স" এর উপর ভিত্তি করে আমি অন্য বিকাশকারীরা নিজেই এপিআই কোড পরিবর্তন করে আশ্চর্য হয়েছি (না আমি সত্যই বিচার করব না)।
এরুটান 409

5

নিশ্চিত হয়ে নিন যে আপনি কোনও ইউআরএল থেকে লোড করছেন:

https://www.youtube.com/embed/HIbAz29L-FA?modestbranding=1&playsinline=0&showinfo=0&enablejsapi=1&origin=https%3A%2F%2Fintercoin.org&widgetid=1

"অরিজিনাল" উপাদানটি নোট করুন, পাশাপাশি "সক্ষমজসাপি = 1"। আপনার ডোমেনটি কী তা উত্সের সাথে অবশ্যই মিলবে এবং তারপরে এটি শ্বেত তালিকাভুক্ত হয়ে কাজ করবে।


3

window.location.hrefউইন্ডোটির উত্সটির সাথে মিল রেখে url ব্যবহার করার চেষ্টা করুন ।


ভাল লাগল, আমি অন্যান্য সমস্ত উত্তর চেষ্টা করেছিলাম এবং এটি আমার পক্ষে কাজ করে!
ক্লোশার

3

আমি একই ত্রুটি পেয়েছি। আমার ভুলটি ছিল যে enablejsapi=1প্যারামিটারটি iframeএসআরসি-তে উপস্থিত ছিল না ।


0

আমি মনে করি ত্রুটির বর্ণনাটি বিভ্রান্তিমূলক এবং মূলত প্লেয়ার অবজেক্টের ভুল ব্যবহারের সাথে করণীয়।

একটি স্লাইডারে নতুন ভিডিওগুলিতে স্যুইচ করার সময় আমার একই সমস্যা ছিল।

এখানে বর্ণিতplayer.destroy() ফাংশনটি সহজভাবে ব্যবহার করার সময় সমস্যাটি চলে যায়।


আপনি কি দয়া করে দেখতে পাচ্ছেন যে আমি এখানে ইউটিউবে যা অনুভব করছি তা বুঝতে পেরেছি এবং এটি সম্পর্কিত কিনা? stackoverflow.com/q/57649870/470749 হয়তো আপনার একটি উত্তর থাকবে। ধন্যবাদ!
রায়ান

0

আমার একই সমস্যা ছিল এবং এটি দেখা যাচ্ছে কারণ আমার ক্রোম এক্সটেনশান "এইচটিটিপিএস সর্বত্র" চলছিল। এক্সটেনশনটি অক্ষম করা আমার সমস্যার সমাধান করে।


0

"নির্দিষ্ট সাইট বা অ্যাপ্লিকেশনগুলিতে প্লেব্যাক করা" যখন এই সঠিক ত্রুটিটি ইউটিউবের একটি সামগ্রী ব্লকের সাথে সম্পর্কিত ছিল। আরও নির্দিষ্ট করে ডাব্লুএমজি (ওয়ার্নার মিউজিক গ্রুপ) দ্বারা।

ত্রুটি বার্তাটি অবশ্য এই প্রস্তাব দেয় যে কোনও HTTP সাইটে একটি https iframe আমদানি করা সমস্যা ছিল, যা এটি এই ক্ষেত্রে ছিল না।


0

অপসারণ ডিএনএস প্রিফেট এই সমস্যাটি সমাধান করবে।

আপনি যদি ওয়ার্ডপ্রেস ব্যবহার করছেন তবে আপনার থিমের ফাংশন.এফপি এই লাইনটি যুক্ত করুন

remove_action( 'wp_head', 'wp_resource_hints', 2 );

0

আপনি আপনার আইফ্রেমটিকে এটির মতো করে পরিবর্তন করতে এবং আপনার বর্তমান ওয়েবসাইট হতে উত্স যোগ করতে পারেন। এটি আমার ব্রাউজারে ত্রুটি সমাধান করে।

<iframe class="test-testimonials-youtube-group"  type="text/html" width="100%" height="100%"
  src="http://www.youtube.com/embed/HiIsKeXN7qg?enablejsapi=1&origin=http://localhost:8000"
  frameborder="0">
</div>

রেফ: https://developers.google.com/youtube/iframe_api_references# লডিং_এ_ভিডিও_প্লেয়ার


0

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

সুতরাং জেএস কোডটি কল করার আগে আপনার যা নিশ্চিত করতে হবে তা এখানে: * কোনও জাভাস্ক্রিপ্ট বলা হওয়ার আগে কনটেইনারটি লোড হয়েছে কিনা তা নিশ্চিত করুন * লক্ষ্যযুক্ত ইউআরএল যে কোনও পাত্রে যা আছে তা লোড হয়েছে কিনা তা নিশ্চিত করুন Make

আমি অনুরূপ ইস্যুটি জুড়ে এসেছি তবে আমার স্থানীয় যখন আমি আমার জাভাস্ক্রিপ্টটি মূল পৃষ্ঠার অনলোডের আগে ভালভাবে চালানোর চেষ্টা করছিলাম যা ত্রুটির বার্তার কারণ হয়ে থাকে। আমি পুরো পৃষ্ঠাটি লোড হওয়ার অপেক্ষায় কেবল প্রয়োজনীয় ফাংশনটি কল করে এটি স্থির করেছি।

পৃষ্ঠাটি লোড হয়ে যাওয়ার পরে একটি টাইমআউট ফাংশন যুক্ত করে আপনি কেবল এটি করতে পারতেন এবং আপনার অনলোড ইভেন্টটিকে কল করে:

উইন্ডো.অনলোড = নতুন ফাংশন () {সেটটাইমআউট (ফাংশন () {// কিছু অনলোড ইভেন্ট}, 10); }

এটি লোড ট্রিগার হওয়ার পরে আপনি যা চেষ্টা করছেন তা কার্যকরভাবে কার্যকর করবে তা নিশ্চিত করবে।


document.addEventListener("DOMContentLoaded", function () {দুর্ভাগ্যক্রমে সমস্ত কিছু ভিতরে রাখা কোনও উপকারে আসেনি।
রায়ান

0

আপনি যখন কলগুলিতে কোনও টার্গেটআরগিন নির্দিষ্ট না করেন তখন আপনি এই বার্তাটি পান window.postMessage()

এই উদাহরণে আমরা প্রথম *আইফ্রেমে একটি বার্তা পোস্ট করি এবং লক্ষ্য হিসাবে ব্যবহার করি , যা কোনও টার্গেটওরিগিনে যোগাযোগের অনুমতি দেয়।

window.frames[0].postMessage({
                    message : "Hi there",
                    command :"hi-there-command",
                    data : "Some Data"
                }, '*')

0

আমার দৃষ্টিতে কমপক্ষে এটি একটি নির্দোষ "প্রস্তুত নয়" শর্ত বলে মনে হচ্ছে যে এটি সফল না হওয়া পর্যন্ত API চেষ্টা করে ries

আমি এর মধ্যে দুটি থেকে নয়টি পর্যন্তই পাই (আমার সবচেয়ে খারাপ-কেস-পরীক্ষক, ২০০৯ ফসিলবুকটিতে সেলুলার হটস্পটের মাধ্যমে 20 টি ট্যাব খোলা আছে) .... তবে ভিডিওটি সঠিকভাবে কাজ করে। এটি একবার অনুসন্ধানের জন্য আমার পোস্টমেসেজ ভিত্তিক কলগুলি চালাচ্ছে, অন্যদের পরীক্ষা করে দেখেনি।


0

কিছু ক্ষেত্রে (যেমন একজন মন্তব্যকারী উল্লেখ করেছেন) এটি যদি আপনি প্লেয়ারকে ডিওএমের মধ্যে সরিয়ে রাখেন appendবা পছন্দ করেন তবে এটি হতে পারে ..


-1

আপনি চেষ্টা করতে পারেন :

document.getElementById('your_id_iframe').contentWindow.postMessage('your_message', 'your_domain_iframe')

-1

আমিও একই সমস্যার মুখোমুখি ছিলাম তখন আমি অফিসিয়াল ইউটিউব ইফরামের অপিকে দেখি যেখানে আমি এটি পেয়েছি:

ব্যবহারকারীর ব্রাউজারটি অবশ্যই HTML5 পোস্টমেসেজ বৈশিষ্ট্যটি সমর্থন করে। বেশিরভাগ আধুনিক ব্রাউজার পোস্টমেসেজ সমর্থন করে

এবং অফিশিয়াল পৃষ্ঠাটিও এই সমস্যার মুখোমুখি হয়েছিল তা দেখতে ঘুরে বেড়ানো। স্রেফ অফিসিয়াল ইউটিউব ইফ্রেমে অপি দেখুন এবং কনসোল লগগুলি দেখুন। আমার ক্রোম সংস্করণটি 79.0.3945.88।


-2

আমার ছিল:

<youtube-player
  [videoId]="'paxSz8UblDs'"
  [playerVars]="playerVars"
  [width]="291"
  [height]="194">
</youtube-player>

আমি সবেমাত্র প্লেয়ার ওয়ার্সের সাহায্যে লাইনটি সরিয়েছি এবং এটি কনসোলে ত্রুটি ছাড়াই কাজ করেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.