Возможность генерирования случайного UUID

Чтобы AJAX смог «дождаться, пока страница будет отображаться», на самом деле нужно будет полностью обработать страницу, извлечь и запустить все включенные файлы CSS и javascript. Это непросто и не рекомендуется. К счастью, вам все равно не нужно это делать.

Вот три лучших способа подхода к этой проблеме:

  1. Страница ресурсов (mpdining.rewardsnetwork.com, для этого вопроса) может иметь API. Если это так, найдите его и используйте. Это ваш лучший выбор, если он доступен.
  2. Проанализируйте javascript и / или AJAX-запросы страницы ресурса. Используйте GM_xmlhttpRequest(), чтобы напрямую извлекать только данные полезной нагрузки, а не пытаться проанализировать страницу ресурсов. Иногда этот процесс довольно прост, но для некоторых сайтов требуется сложное взаимодействие и / или аутентификация.
  3. Загрузите страницу ресурса в скрытом iframe; установите сценарий Greasemonkey для запуска как на странице ресурсов, так и на главной странице и для передачи желаемых данных с помощью postMessage() . Этот подход почти всегда будет работать, хотя вам, возможно, придется помешать некоторым страницам пытаться «выкинуть» iframe.

Использование скрытого iframe для получения данных из междоменной страницы ресурсов:

Сценарии Greasemonkey будут запускаться как на обычной странице, так и на страницах внутри iframe. Фактически, вы можете установить один и тот же сценарий для работы как на двух, так и на нескольких доменах.

Если главная страница и страница ресурса iframed оба сценария сценариев GM, экземпляры сценария могут связываться друг с другом, кросс-домен, используя postMessage() .

Например, предположим, что у нас есть сайт, fiddle.jshell.net/9ttvF/show , который содержит данные о путешествии, и мы хотим mash-up , чтобы сайт с соответствующими данными с ресурсного сайта , jsbin.com/ahacab , который использует AJAX для получения своих полезных данных.

Целевой (основной) сайт выглядит так: target site [/g13]

Сначала сайт ресурса выглядит следующим образом: resource site, start [/g14]

Затем заканчивается следующим образом: resource site, finish [/g15]

Следующий скрипт:

  1. Загружает страницу ресурса в скрытом iframe.
  2. Запускает второй экземпляр, который выполняется на iframed page.
  3. Ожидает завершение страницы iframed, обработка результатов по желанию .
  4. Отправляет требуемые данные полезной нагрузки в GM-скрипт, запущенный на целевой (главной) странице.
  5. Затем скрипт целевой страницы вставляет данные полезной нагрузки для завершения разметки.
// ==UserScript==
// @name     _Cross-site, AJAX scrape demo
// @include  http://fiddle.jshell.net/9ttvF/show/
// @include  http://jsbin.com/ahacab*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==

if (/fiddle\.jshell\.net/i.test (location.host) ) {
    console.log ("***Master-page start...");

    /*--- Inform the user.
    */
    $("#plainResults").before (
        '
Greasemonkey is fetching results from jsbin.com...
' ); /*--- Setup to process messages from the GM instance running on the iFrame: */ window.addEventListener ("message", receiveMessage, false); /*--- Load the resource site in a hidden iframe. */ $("body").append (''); } else { console.log ("***Framed start..."); /*--- Wait for the AJAXed-in content... */ waitForKeyElements ("#results table.rezTable", sendResourcePageData); } function sendResourcePageData (jNode) { console.log ("Results found! Sending them to the main window..."); window.top.postMessage (jNode.html(), "*"); } function receiveMessage (event) { if (event.origin != "http://jsbin.com") return; $("#gmFetchRez").html (event.data); } //--- Use CSS to control appearances. GM_addStyle ( " \ #gmIframe { \ display: none; \ } \ #gmFetchRez { \ background: lightYellow; \ border: 3px double red; \ padding: 1em; \ } \ " );

Окончательный результат выглядит следующим образом: скрипт установлен и запущен: mashup result [/g16]

13
задан Mudaer 28 May 2015 в 19:58
поделиться