একই উত্স নীতি
আপনি জাভাস্ক্রিপ্ট ব্যবহার করে ভিন্ন উত্স সহ কোনও অ্যাক্সেস করতে পারবেন না, আপনি যদি<iframe>
এটি করতে পারেন তবে এটি একটি বিশাল সুরক্ষা ত্রুটি হবে। জন্য একই বংশোদ্ভূত নীতি ব্রাউজার স্ক্রিপ্ট একটি ভিন্ন উৎপত্তি সঙ্গে একটি ফ্রেম অ্যাক্সেস করার চেষ্টা ব্লক ।
ঠিকানার নীচের অংশগুলির মধ্যে কমপক্ষে একটি রক্ষণাবেক্ষণ না করা হলে উত্সটি আলাদা বিবেচনা করা হয়:
<protocol>://<hostname>:<port>/...
প্রোটোকল , হোস্টনাম এবং পোর্ট অবশ্যই আপনার ডোমেনের সমান হতে হবে, যদি আপনি কোনও ফ্রেমে অ্যাক্সেস করতে চান।
দ্রষ্টব্য: ইন্টারনেট এক্সপ্লোরার এই নিয়মটি কঠোরভাবে অনুসরণ না করার জন্য পরিচিত, বিশদগুলির জন্য এখানে দেখুন।
উদাহরণ
নীচের ইউআরএলগুলি অ্যাক্সেস করার চেষ্টা করে কী হবে তা এখানে http://www.example.com/home/index.html
URL RESULT
http://www.example.com/home/other.html -> Success
http://www.example.com/dir/inner/another.php -> Success
http://www.example.com:80 -> Success (default port for HTTP)
http://www.example.com:2251 -> Failure: different port
http://data.example.com/dir/other.html -> Failure: different hostname
https://www.example.com/home/index.html:80 -> Failure: different protocol
ftp://www.example.com:21 -> Failure: different protocol & port
https://google.com/search?q=james+bond -> Failure: different protocol, port & hostname
কার্যসংক্রান্ত
যদিও একই-উত্স নীতি স্ক্রিপ্টগুলিকে আলাদা উত্সযুক্ত সাইটগুলির সামগ্রী অ্যাক্সেস করা থেকে বিরত করে, যদি আপনি উভয় পৃষ্ঠার মালিক হন তবে আপনিwindow.postMessage
message
দুটি পৃষ্ঠার মধ্যে বার্তা প্রেরণের জন্য এই সমস্যাটি এবং এর সম্পর্কিত ঘটনাটি ব্যবহার করে এই জাতীয় সমস্যাটি ঘটাতে পারেন:
আপনার প্রধান পৃষ্ঠায়:
let frame = document.getElementById('your-frame-id');
frame.contentWindow.postMessage(/*any variable or object here*/, 'http://your-second-site.com');
দ্বিতীয় যুক্তি থেকে postMessage()
হতে পারে '*'
গন্তব্য উৎপত্তি সম্পর্কে কোন অগ্রাধিকার সূচিত করার জন্য। আপনার অন্য কোনও সাইটে প্রেরিত ডেটা প্রকাশ এড়ানোর জন্য, যখন সম্ভব হয় তখন একটি লক্ষ্য উত্স সর্বদা সরবরাহ করা উচিত।
আপনার <iframe>
(মূল পৃষ্ঠায় অন্তর্ভুক্ত):
window.addEventListener('message', event => {
// IMPORTANT: check the origin of the data!
if (event.origin.startsWith('http://your-first-site.com')) {
// The data was sent from your site.
// Data sent with postMessage is stored in event.data:
console.log(event.data);
} else {
// The data was NOT sent from your site!
// Be careful! Do not use it. This else branch is
// here just for clarity, you usually shouldn't need it.
return;
}
});
এই পদ্ধতিটি উভয় দিকেই প্রয়োগ করা যেতে পারে , মূল পৃষ্ঠায় খুব বেশি শ্রোতা তৈরি করা এবং ফ্রেম থেকে প্রতিক্রিয়া পাওয়া। একই যুক্তিটি পপ-আপগুলিতে এবং মূলত যে কোনও নতুন উইন্ডো মূল পৃষ্ঠা (যেমন ব্যবহার করে window.open()
) দ্বারা উত্পাদিত হয় , কোনও পার্থক্য ছাড়াই প্রয়োগ করা যেতে পারে ।
আপনার ব্রাউজারে সম-উত্স নীতিটি অক্ষম করা হচ্ছে
ইতিমধ্যে এই বিষয় সম্পর্কে কিছু ভাল উত্তর রয়েছে (আমি কেবল তাদের গুগল করে দেখলাম), সুতরাং, ব্রাউজারগুলির জন্য যেখানে এটি সম্ভব, আমি আপেক্ষিক উত্তরটি লিঙ্ক করব। তবে দয়া করে মনে রাখবেন যে সম-উত্স নীতিটি অক্ষম করা কেবলমাত্র আপনার ব্রাউজারকেই প্রভাবিত করবে । এছাড়াও, একই-উত্সের সুরক্ষা সেটিংস সহ একটি ব্রাউজার চালানো কোনও ওয়েবসাইটকে ক্রস-অরিজিন রিসোর্সে অ্যাক্সেসের মঞ্জুরি দেয়, সুতরাং এটি খুব অনিরাপদ এবং আপনি কী করছেন ঠিক না জানলে কখনও করা উচিত নয় (যেমন উন্নয়নের উদ্দেশ্য) ।
Access-Control-Allow-Origin
কেবলমাত্র এক্সএইচআর, ফন্ট, ওয়েবজিএল এবং আইফ্রেমেcanvas.drawImage
প্রযোজ্য নয় । আমি বিশ্বাস করিpostMessage
একমাত্র বিকল্প option