Возможно ли установить связь между страницами (вкладками), которые устанавливают "X-Frame-Options" в "SAMEORIGIN" с помощью пользователя script?

В контексте пользователя script, например, выполненного Tampermonkey, возможна ли связь между двумя страницами разных доменов, которые устанавливают "X-Frame-Options" в "SAMEORIGIN"?

Я знаю этот способ отправки сообщений с одной страницы на другую с помощью iFrames и postMessage, но при работе с сайтами, которые вы не контролируете, например, в моем case Qaru и Google (работая над ботом, чтобы автоматизировать что-то для себя), вы получите ошибку SAMEORIGIN при попытке создать iFrame.

Но я подумал, что, поскольку я могу вставлять script на обе страницы, возможно, удастся снять какое-то решение или альтернативное решение.

Одно предложение, общий рабочий выглядело многообещающим, но, похоже, страница должна быть от одного источника. Также я рассмотрел спецификацию Broadcast Channel API, но он еще нигде не реализован, и он также, похоже, связан с одним и тем же происхождением политика.

Еще одна предлагаемая возможность, упомянутая до сих пор в комментариях, заключается в использовании GM API, поскольку это пользовательский script (расширенный/специальные функции JS). С GM_xmlhttpRequest мы можем игнорировать кросс-доменные ограничения и загружать google.com, а затем помещать их в iframe, но все источники укажут на сайт, на котором встроен iframe, поэтому поиск на странице Google пытается выполнить параметры поиска в родительском домене сайта.

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);
});

Возможно, я мог бы отредактировать поисковые запросы, чтобы указать на google.com специально, вместо того чтобы позволить поиску принять домен родительской страницы. И если это не удается из-за некоторого зависания с той же политикой происхождения, я мог бы даже попытаться заменить Google xmlhttpRequest на GM_xmlhttpRequest, но я не уверен, что это можно сделать с пользователем script, если вы загружаете функции GM, запускаетесь в песочнице, не в состоянии переплетаться со сценариями страниц, если я правильно понимаю. Я просто не уверен.

С другой стороны, если мы можем обмануть содержимое iframe's для обработки google.com в качестве домена для запросов, хотя мы в бизнесе, но примеры, похоже, не существуют для такого рода вещей, поэтому Мне трудно понять, как это сделать.

Ответ 1

Да, возможно, через 2 маршрута:

  • Так как пользователь - script, у вас есть доступ к специальным функциям, известным как функции GM. С помощью GM_xmlhttpRequest мы можем отправить запрос, который игнорирует одну и ту же политику происхождения, что позволяет нам загружать стороннюю страницу в iFrame, обеспечивая связь между кадрами через postMessage. Хорошая вещь об этом заключается в том, что нет перезагрузки страницы, но это плохо, вам придется динамически модифицировать собственный , чтобы выполнить GM_xmlhttpRequest и указать полный целевой URL, а не только путь, например /example.js, иначе домен внешнего окна будет использоваться в любых запросах, сделанных внутренним фреймом.
  • Мы можем использовать URL-запросы, открывая вкладку того же происхождения, что и страница, с которой вы хотите общаться. Затем мы можем использовать общих веб-работников для отправки сообщений на любые ранее открытые страницы этого домена и отправки данных из запроса URL на нужную вам страницу. Профи - вам не нужно динамически изменять сценарии страниц, но недостатки - это то, что вам нужно открыть новую вкладку для каждого сообщения между разными доменами.