Я делаю HTML виджет для веб-сайтов.Допустим, он будет отображать текущие фондовые индексы.
Короче говоря, произвольный владелец сайта берет от меня фрагмент кода и включает его в свою веб-страницу http://website.com/index.html. Когда произвольный пользователь открывает http://website.com/index.html,, мой код отправляет запросна мой сервер (provider.com), который выполняет необходимые операции и возвращает информацию в браузер пользователя.Когда ответ получен, пользователь увидит соответствующую стоимость акций на http://website.com/index.html.
В index.html сервис может быть назван так
<script type="text/javascript" src="provider.com/service.js"> </script>
<div id="target_area"></div>
<script type="text/javascript">
service.show("target_area", options);
</script>
Теперь проблема в та же политика происхождения : я не могу просто отправить запрос ajax с веб-сайта website.com на веб-сайт provide.com и вернуть HTML-код для вставки на веб-страницу клиента.Я вижу несколько решений, которые я перечисляю ниже, но ни одно из них не удовлетворяет меня.Интересно, не могли бы вы что-нибудь предложить, особенно если у вас был соответствующий опыт?
1) iframe, простой и понятный.Недостаток: должны быть фиксированные размеры + тупые полосы прокрутки, появляющиеся в некоторых браузерах.Может быть исправлено с помощью javascript, но все эти специфичные для браузера изменения не кажутся мне полезными.
2) JSONP .Проблема: не может вернуть весь кусок HTML, должны возвращать только данные.Затем на стороне браузера мне придется использовать javascript для встраивания данных в HTML-фрагмент, статически размещенный в index.html.Звучит не очень хорошо, потому что формат данных не очень прост и может даже измениться позже.
3) Используйте скрытый iframe для выполнения запросов ajax.Немного сложно, но звучит как путь.
Ну, это мои мысли по этому вопросу.Есть ли лучшие способы?
Кстати, я тоже пытался проверить некоторые существующие виджеты, но не нашел много полезной информации.
Все доменные имена, используемые в этом тексте, являются вымышленными, и любое сходство является чисто случайным:)
update Работает сейчас, как предложил SLaks!Если кому-то интересны подробности, ответный html должен быть постобработан следующим образом (ruby)
body = body.gsub '"', '\\"'
body = body.gsub /\n/, '\\n';
body = body.gsub '/', '\\/';
body = params[:callback] + '("' + body + '");';
После этого вы можете использовать jquery с опцией "dataType: 'jsonp'".