альтернатива междоменной javascripting?
-
06-07-2019 - |
Вопрос
В настоящее время я использую прокси-скрипт для решения этой проблемы политики единого происхождения. это медленно и создает накладные расходы. Не говоря уже о том, что JavaScript не отображается.
есть ли рабочая альтернатива?
Решение
О, дорогой, я думаю, что решение, которое вы ищете, - это использование IFRAME. Однако подход iframe - это и умственное, и техническое начинание. Я предлагаю вам начать с этого руководства:
Альтернативный подход - асинхронное получение данных с другого сервера с использованием тегов script и json:
<script src="http://remotesite.com/path/to/script/blah.js"></script>
Вы можете создать новый элемент тега SCRIPT для передачи и загрузки данных и добавления в DOM или вставки разметки в элементы innerHTML.
Я уверен, что вы можете найти некоторые подробные примеры и способы реализации, но одну вещь, которую вы должны отслеживать с помощью нового метода SCRIPT, - это добавление в DOM такого большого количества. Это может помочь вам и послужит отправной точкой:
function require (url, callback) {
if (!isScriptLoaded(url)) {
document.write('<script src="' + url + '" type="text/javascript" charset="utf-8"><\/script>');
if (callback) {
callback();
}
}
}
function isScriptLoaded(src) {
var scriptsLoaded = {};
var scriptTags = document.getElementsByTagName("script");
for (var i = 0, script; script = scriptTags[i]; i++) {
if (script.src) {
scriptsLoaded[script.src] = 1;
}
};
if (scriptsLoaded[src]) {
return true;
}
return false;
}
(не проверено, но должно работать!)
В любом случае - удачи.
Другие советы
Если вы можете предоставить имя обратного вызова в качестве параметра для службы, предоставляющей соответствующий код JavaScript, то вы можете добавить в документ тег сценария с атрибутом src
, указывающим на вызов службы. , В противном случае вам не повезло.
Используйте iframe и попробуйте window.postMessage (message, origin)
(это будет parent.postMessage
из iframe и iframeElement.contentWindow.postMessage
с верхней страницы) для всех последних основных браузеров (Firefox, IE, Safari, Chrome и т. д.) и изменение / опрос window.name
для старых браузеров.
JSON-P идеально подходит для такого рода вещей. Если вы используете jQuery или аналогичные библиотеки JavaScript, ваша работа станет еще проще:
http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback р>
Конечно, именно от того, что вы пытаетесь сделать, зависит, будете ли вы использовать JSON-P, скрытые фреймы, postMessage, Flash-прокси или любое другое экзотическое решение.
Если вы управляете обоими доменами и заботитесь только о Firefox 3.5+, вы можете использовать объект XMLHttpRequest и настроить разрешения с помощью Контроль доступа . Р>