Загрузить удаленный URL с помощью Greasemonkey и jQuery - PullRequest
1 голос
/ 08 апреля 2009

Я пытаюсь выполнить Ajax-запрос из скрипта Greasemonkey, но я застрял в том, что не могу загрузить данные с удаленного URL. Сценарий работает только в том случае, если просматриваемая страница находится в том же домене, что и Ajax-вызов. Пример:

// ==UserScript==
// @name          Hello jQuery
// @namespace     http://www.example.com/
// @description   jQuery test script
// @include       *
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js
// ==/UserScript==

$(document).ready(function() {
    $.get("http://www.google.com", function(data){
        alert("Data Loaded: " + data);
    });
});

// EOF

Этот пользовательский скрипт отлично работает при посещении google.com, но не работает без ошибок или предупреждений в любом другом домене. Какое решение?

Ответы [ 4 ]

4 голосов
/ 08 апреля 2009

Только GM_xmlhttpRequest может осуществлять межсайтовый доступ, а не обычный XMLHttpRequest , который использует jQuery.

0 голосов
/ 09 января 2012

В Greasemonkey есть функция с именем GM_xmlhttpRequest для XMLHttpRequest . Однако он не соответствует интерфейсу XmlHttprequest. Следовательно, его невозможно использовать с jQuery. Это работает с JQuery 1.5.

jQuery Ajax в Greasemonley выглядит следующим образом:

$.ajax({
    url: '/p/',// this even works for cross-domain requests by default
    xhr: function(){ return new GM_XHR(); },
    type: 'POST',
    success: function(val){
        ...
    }
});

Источник: http://www.monperrus.net/martin/greasemonkey+jquery+and+xmlhttprequest+together

0 голосов
/ 27 мая 2009

Вы можете попробовать load(URL, [data], [func]).

Я использовал его в примере приложения , и он загрузил поиск Google для меня, даже если он находится в другом домене. Недостатком является то, что при попытке доступа к другому домену появится предупреждение безопасности JavaScript.

Надеюсь, это поможет!

P.S. Я на самом деле пробовал домен не из Google и получил несколько ошибок. Но я обнаружил, что ошибка была, потому что страница была несовместима с полученным содержимым ответа (ошибки JavaScript и т. Д.). Я обнаружил, что некоторые страницы успешно выполнены и созданы в другом домене. Поэтому вы должны следить за тем, какой контент вы также загружаете.

Возможно, в таком случае загрузка контента в iframe будет для вас более удобной.

0 голосов
/ 08 апреля 2009

Да, ты не можешь этого сделать. Это называется XSS

...