Как мне заставить Ajax работать с Bookmarklet и обойти Javascript Same Origin Policy? - PullRequest
2 голосов
/ 29 июня 2011

Я пытаюсь написать букмарклет, и цель состоит в том, чтобы иметь возможность отправлять информацию с любого сайта X (исходной страницы, на которой они находятся при нажатии на букмарклет) на серверы моего сайта, оставаясь на сайте X.

В идеале я мог бы отправить ответ обратно и где-то всплыть, но это не обязательно.

Я продолжаю сталкиваться с проблемой той же политики происхождения - что с сайта X, XMLHttpRequests может быть инициирован только с доменом сайта X.

Кто-нибудь знает способ обойти это (или учебник, на который они могут указать мне)? какой-нибудь Ajax с букмарклетом?

Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 29 июня 2011

Вы можете выполнить междоменный запрос ajax (отправить с помощью GET и получить данные в формате JSON), используя JSONP .

2 голосов
/ 29 июня 2011

Букмарклет, который вы загружаете, может POST-данные на ваш сервер со страницы хоста. Это странно, но только Javascript ограничен той же политикой происхождения.
Выполнение GET или POST вызовов на другой сервер работает нормально.

Букмарклет может добавить скрытую IFRAME на страницу хоста с атрибутом src, например http://yourdomain.com/listen.

Затем создайте FORM с атрибутом: target, указывающим на это IFRAME.
И, наконец, отправьте форму для POST данных.

Печальная новость в том, что SOP не позволяет вам читать ответ POST напрямую, как это происходит в IFRAME и имеет другой домен, чем страница хоста.

Но если вам нужна обратная связь с запросом, ваш букмарклет может использовать setInterval для опроса каждые X миллисекунд и запрашивать статус запроса, используя JSONP .

Вызов что-то вроде:
http://yourdomain.com/get-post-status?id=2234234&callback=showResult

...