HTML виджет, общающийся с сервером - PullRequest
2 голосов
/ 09 июня 2010

Я делаю 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'".

Ответы [ 2 ]

1 голос
/ 09 июня 2010

Я решил эту проблему в прошлом, запустив очень легковесный прокси-сервер на website.com, который будет принимать запрос AJAX от клиента, передавать его на provider.com и отправлять обратно результаты, которые возвращаются. с provider.com. Я не уверен, является ли это приемлемым решением в вашей среде.

Одним из преимуществ этого решения является то, что вы можете добавить значение в прокси-сервер, например, кешировать ответы на некоторое время, шифровать и / или сжимать связь с provider.com, аутентификацию и авторизацию и т. Д.

1 голос
/ 09 июня 2010

Вы можете использовать JSONP для отправки строки, содержащей необработанный HTML.

JSONP - лучший вариант здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...