2016-08-01 11 views
10

W kontekście skryptu użytkownika, na przykład wykonywanego przez Tampermonkey, czy możliwa jest komunikacja między dwiema stronami różnych domen, które ustawiają "X-Frame-Opcje" na "SAMEORIGIN"?Czy można komunikować się między stronami (zakładkami), które ustawiają "X-Frame-Opcje" na "SAMEORIGIN" ze skryptem użytkownika?

wiem o this way wysyłania wiadomości z jednej strony na drugą przez korzystających iFrames i postMessage, ale podczas pracy z witryn nie kontroli, jak w moim przypadku przepełnienie stosu i Google (pracuje na bot zautomatyzować coś dla siebie) , podczas próby utworzenia elementu iFrame zostanie wyświetlony błąd SAMEORIGIN.

Ale myślałem, że skoro mogę wstawić skrypt na obu stronach, możliwe, że uda się usunąć pewne obejście lub alternatywne rozwiązanie.

Jedna z propozycji, shared worker wyglądała obiecująco, ale wydaje się wymagać, aby strona pochodziła z tego samego źródła. Spojrzałem również na specyfikację Broadcast Channel API, ale nie jest ona jeszcze nigdzie implementowana, a także wydaje się być związana z tą samą polityką pochodzenia.

Inną sugerowaną możliwością wspomnianą do tej pory w komentarzach jest użycie GM API, ponieważ jest to skrypt użytkownika (rozszerzone/specjalne funkcje JS). Dzięki GM_xmlhttpRequest możemy zignorować ograniczenia między domenami i załadować google.com, a następnie umieścić je w elemencie iframe, ale wszystkie źródła będą wskazywać na stronę, w której znajduje się iframe, więc przeszukiwanie strony Google próbuje wykonać wyszukiwania w domenie nadrzędnej witryny .

GM_xmlhttpRequest({ 
    method: "GET", 
    url: "https://www.google.com", 
    headers: { 
     "User-Agent": "Mozilla/5.0", 
     "Accept": "text/xml" 
    }, 
    onload: function(response) { 
     $('html').html('<iframe id="iframe"></iframe>'); 
     $("#iframe").contents().find('html').html(response.responseText); 
}); 

Może mógłbym edytować żądań wyszukiwania, aby wskazywał google.com konkretnie, zamiast pozwolić poszukiwanie przyjąć domenę stronie macierzystej. A jeśli to się nie uda z powodu jakiegoś zawieszenia z tą samą zasadą pochodzenia, mogę nawet spróbować zastąpić Google xmlhttpRequest z GM_xmlhttpRequest, ale nie jestem pewien, czy można to zrobić od skryptu użytkownika, jeśli ładujesz funkcje GM , będzie działać w piaskownicy, nie będzie w stanie przeplatać się ze skryptami stron, jeśli dobrze zrozumiem. Po prostu nie jestem pewien.

Z drugiej strony, jeśli możemy oszukać zawartość iframe's, aby traktować google.com jako domenę żądań, mimo że działamy, ale przykłady nie wydają się istnieć dla tego rodzaju rzeczy, więc jestem mając problemy z ustaleniem, jak to zrobić.

+1

To samo źródło zapobiega przeglądaniu strony przeglądarki. Nie ma gdzie wstawić skryptu –

+2

Zawsze są funkcje 'GM_ *'. Wierzę, że Tampermonkey obsługuje te, których potrzebujesz. –

+1

_ "Ale pomyślałem, ponieważ jestem w stanie wstawić skrypt na obu stronach" _ Jeśli możesz wstawić '