Middle
iframe менен негизги баракча ортосунда маалымат алмашуу кандай болот?
sobes.tech AI
AIден жооп
Маалымат алмашуунун бир нече жолдору бар:
-
PostMessage API:
- негизги жана коопсуз жол.
- терезелер (iframe/ата-эне, ар башка домендер) арасында билдирүүлөрдү жөнөтүүгө мүмкүндүк берет.
- күтүлүүчү
originкөрсөтүү маанилүү, ал XSS чабуулдарын алдын алууга жардам берет.
// Ата-эне терезеден iframeге жөнөтүү const iframeEl = document.getElementById('my-iframe'); iframeEl.contentWindow.postMessage('Салам ата-энен!', 'https://trusted-domain.com'); // iframe ичинде кабыл алуу window.addEventListener('message', function(event) { if (event.origin !== 'https://parent-domain.com') { return; // Жөнөтүүчүнү текшерүү } console.log('Iframe ичинде алынган билдирүү:', event.data); }); // iframeтен ата-эне терезеге жөнөтүү window.parent.postMessage('Салам iframeтен!', 'https://parent-domain.com'); // ата-эне терезеде кабыл алуу window.addEventListener('message', function(event) { if (event.origin !== 'https://iframe-domain.com') { return; // Жөнөтүүчүнү текшерүү } console.log('Атка-эне ичинде алынган билдирүү:', event.data); }); -
windowобъектине түз жетүү (тек гана Same-Origin үчүн):- Эгер iframe жана ата-эне баракчасы бир эле доменде болсо (Same-Origin Policy), алар түздөн-түз
windowобъекттерине жеткире алышат.
// Ата-эне терезеде const iframeEl = document.getElementById('my-iframe'); const iframeWindow = iframeEl.contentWindow; iframeWindow.someVariable = 'Ата-энеден келген маані'; iframeWindow.someFunction(); // iframe ичинде const parentWindow = window.parent; console.log(parentWindow.someVariable); parentWindow.someOtherFunction(); - Эгер iframe жана ата-эне баракчасы бир эле доменде болсо (Same-Origin Policy), алар түздөн-түз
-
URL hash (
#):- жөнөкөй, бирок чектелүү жол.
- кыска маалыматтарды өткөрүү үчүн колдонулат, URLдин hash бөлүгүн өзгөртүү аркылуу.
- hash өзгөрүүлөр сайтты кайра жүктөбөйт.
- hash өзгөрүүлөрүн байкоо керек (мисалы,
hashchangeиш-чарасы аркылуу).
// ата-эне терезеде, iframe hash өзгөртүү үчүн const iframeEl = document.getElementById('my-iframe'); iframeEl.contentWindow.location.hash = 'data=кейинки_маани'; // iframe ичинде, hash окуу window.addEventListener('hashchange', function() { const hash = window.location.hash; console.log('Hash өзгөрдү:', hash); // Hashтен маалыматтарды талдоо }); -
location.hrefөзгөртүү (азырынча сунушталбайт):- маалыматтарды URL өзгөртүп, кайра жүктөө аркылуу өткөрүү.
- көп колдонулбайт.
-
Бөлүштүрүлгөн сактагычтар (Same-Origin):
localStorageжанаsessionStorage.- эгер iframe жана ата-эне бир эле доменде болсо, алар бирдей сактагычтарды колдонушат.
// ата-эне терезеде localStorage.setItem('sharedData', JSON.stringify({ value: 'Мисал' })); // iframe ичинде const data = JSON.parse(localStorage.getItem('sharedData')); console.log('localStorage дан алынган маалымат:', data);
Метод тандоо коопсуздук саясатына (Same-Origin Policy) жана өткөрүлө турган маалыматтын көлөмүнө/түрүнө көз каранды. PostMessage эң ийкемдүү жана коопсуз чечим болуп саналат.