Pytanie Jak ustawić postMessage dla wszystkich subdomen


W window.postMessage drugi atrybut określa domenę, do której można wysłać moją wiadomość. Czy jest jakiś sposób na określenie, czy ma on zastosowanie do wszystkich subdomen.

Rzeczy wypróbowane:

iframe.contentWindow.postMessage('The message to send.','http://*.wordpress.com');
iframe.contentWindow.postMessage('The message to send.','http://wordpress.com');

16
2018-01-21 16:44


pochodzenie




Odpowiedzi:


Nie, nie możliwe.

Jedynym scenariuszem, w którym możesz sobie pomóc, jest to, że wiesz, że docelowy element iframe pochodzi ze znanego, skończonego zestawu źródeł (np. "Http://a.wordpress.com", "http://b.wordpress.com"). "i" http://c.wordpress.com "). W takim przypadku wystarczy wysłać żądanie postMessage dla każdego źródła, ponieważ tylko jeden z nich się powiedzie, a pozostałe zawiedzie.


8
2018-01-25 09:27





Jest to możliwe bez znajomości wszystkich nazw domen. Po prostu uzyskaj adres URL strony odsyłającej i otrzymasz od niej źródło:

var parentOrigin = document.referrer.match(/^.+:\/\/[^\/]+/)[0];

Teraz jedyną rzeczą jest sprawdzenie, czy adres URL pasuje do kryteriów (kończy się na wordpress.com) i jeśli tak, zezwól na tę wiadomość do tej konkretnej domeny.

Działa tylko do momentu, w którym użytkownik nawiguje wewnątrz elementu iframe w innym miejscu: strona odsyłająca została zmieniona. Jednak strona odsyłająca może zostać zapisana w elemencie iframe localStorage więc masz listę możliwych domen i możesz wysłać wiadomość do każdej domeny z listy proponowanej przez Ivan Zuzak


5
2018-02-02 17:08



Działa to ładnie i zwraca pełny adres URL strony nadrzędnej, po prostu pobierz wartość przed nawigacją w elemencie iframe. - dougwig
Dopóki nie kupię wordpress.com.au (lub innego tld, który na to pozwala) i dostaję twoje pyszne wiadomości. - Patrick James McDougle
@PatrickJamesMcDougle masz rację, ale tak jest w przypadku bądź ostrożny ze swoimi życzeniami. Pytanie brzmi Jak ustawić postMessage dla wszystkich subdomen. Dlatego twój komentarz należy do pytania, a nie do odpowiedzi. Wreszcie, domeny takie jak wordpress.com.au zwykle nie są uważane za TLD, a.wordpress.com.au będzie TLD w tym przypadku - smnbbrv