Generalnie komunikacja pomiędzy domenami - czy to ajax, czy okna/iframe'y/obrazki itp - jest obarczona dodatkowymi obwarowaniami i bez specjalnych zabiegów nie da się jej uruchomić.
Komunikacja pomiędzy oknami działa w dwóch przypadkach: oba okna są z tej samej domeny (adresy hostów są identyczne, z tym samym protokołem i tym samym portem) albo poprzez wymianę eventów (window.postMessage - vide https://stackoverflow.com/questions/33640495/how-to-communicate-between-two-different-domains-through-javascript). W takim przypadku jedno okno nasłuchuje na dany komunikat, drugie okno mu taki komunikat (aka zdarzenie) wysyła (wraz z dołączonym obiektem z jakimiś danymi). Jeśli potrzebujesz komunikacji w dwie strony, to funkcja obsługi komunikatu może coś zwracać, możesz też zrobić nasłuch na komunikaty i ich wysyłanie w drugą stronę.
Jeśli chodzi o komunikację cross-domain, to albo dodaj do nagłówków http serwera nagłówki CORS, albo użyj JSONP (przy czym JSONP z JSON nie ma wiele wspólnego). Nie da się tego ominąć, bo gdyby się dało, to po co by było takie zabezpieczenie?
Dziękuję za odpowiedź, ale fundamentalnym założeniem jest brak możliwości ingerencji w stronę/aplikację sterowaną przy pełnej możliwości tworzenia aplikacji sterującej.
Mechanizm przesyłania komunikatów (postMessage) wydaje się być dobry, ale jeśli dobrze rozumiem, wymaga obsłużenia po obu stronach. Czyli do aplikacji sterowanej należałoby inna metodą wcisnąć krótki skrypt, który będzie zdolny odbierać i przetwarzać komunikaty. Nawet wystarczyłaby obsługa jednostronna, w kierunku komunikat od aplikacji sterującej (mojej) do sterowanej (zastanej).
Próbowałem odczytać element aplikacji sterowanej (za pomocą getElementById lub getElementByTagName) i z powodu tych samych ograniczeń też się nie dało.
Czy użycie JSONP obejdzie się bez ingerencji w aplikację sterowaną? Chodzi tylko o to, żeby do niej dopisać krótki skrypt, który będzie używany do odbierania komunikatów lub będzie wywoływać funkcje aplikacji.
Czy dodanie nagłówków CORS dotyczy aplikacji sterującej (możliwe do wykonania przy uruchomieniu na serwerze), czy aplikacji sterowanej (brak takiej możliwości, sprzeczne z założeniem).
Moje eksperymenty dowodzą, że CORS nie jest żadnym zabezpieczeniem, tylko uniemożliwia bezpośrednie sterowanie jednej aplikacji przez drugą w typowej przeglądarce, a sterowanie za pomocą GreaseMonkey lub aplikacji z osadzoną przeglądarką jest już możliwe.
Myślę, żeby "ugryźć" problem od innej strony:
Czy w PHP lub w ASP.NET da się zrobić następującą rzecz opisaną poniżej?
Aplikacja pobiera stronę z innej domeny, modyfikuję ją, a następnie wysyła ją do klienta (przeglądarki) w taki sposób, że oryginalne skrypty tej aplikacji będą działać bez zmian, czyli dla nich będzie zachowana zgodność domeny aplikacji. Coś a'la GreaseMonkey, ale na serwerze, a klient dostaje stronę w oryginalnej domenie, ale ze zmodyfikowaną treścią. Może w nagłówkach HTTP wystarczy coś pozmieniać? Zwykłe odczytanie i wysłanie treści nie wiele da, bo wtedy strona będzie nie w oryginalnej, tylko w mojej domenie.
Jeżeli w aplikacji HTML jest link bezwzględny do pliku JS na innej domenie, a JS wywołuje zdarzenie AJAX, to czy decyduje domena pliku HTML, czy pliku JS?
Jeżeli w żaden sposób nie da się usunąć przeszkód spowodowanych przez CORS, to w jaki sposób można wyłączyć respektowanie CORS w IE, Firefox, Chrome i na smartfonach? Teoretycznie, to mogłaby istnieć przeglądarka, która nie sprawdza, czy domeny są te same i zawsze pozwala wpłynąć na jedną aplikację z drugiej.