Я создаю html-виджет для сайтов. Предположим, он отобразит текущие фондовые индексы.
Короче говоря, произвольный владелец веб-сайта принимает фрагмент кода от меня и включает его на свою веб-страницу http://website.com/index.html. Когда произвольный пользователь открывает http://website.com/index.html, мой код отправляет запрос на мой сервер (provider.com), который выполняет необходимые операции и возвращает информацию в браузер пользователя. Когда ответ поступит, пользователь увидит соответствующее значение акций на http://website.com/index.html.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>
Теперь проблема заключается в same origin policy: Я не могу просто отправить запрос AJAX от website.com к provided.com и вернуться к HTML встраивать в веб-страницу клиента. Я вижу несколько решений, которые перечислены ниже, но никто не удовлетворяет меня. Интересно, если бы вы могли что-то предложить, особенно если у вас был определенный опыт.
1) iframe, простой и простой. Недостаток: должны иметь фиксированные размеры + глупые полосы прокрутки, появляющиеся в некоторых браузерах. Может быть исправлена с помощью javascript, но все эти настройки, специфичные для браузера, для меня не подходят.
2) JSONP. Проблема: не может вернуть весь фрагмент html, должен возвращать только данные. Затем, со стороны браузера, мне придется использовать javascript для вставки данных в html-фрагмент, размещенный статически в index.html. Звучит неплохо, потому что формат данных не очень прост и может даже измениться позже.
3) Используйте скрытые iframe для выполнения запросов ajax. Немного сложно, но звучит как способ пойти.
Ну, это мои мысли по этому вопросу. Есть ли лучшие способы?
BTW, я также пытался проверить некоторые существующие виджеты, но не нашел много полезной информации.
Все доменные имена, используемые в данном тексте являются вымышленными и любое сходство чисто случайно :)
обновление работы сейчас, как это было предложено SLaks! Если кто-то заинтересован в деталях, ответ HTML должен быть после обработки, как это (рубин)
body = body.gsub '"', '\\"'
body = body.gsub /\n/, '\\n';
body = body.gsub '/', '\\/';
body = params[:callback] + '("' + body + '");';
После этого, вы можете использовать JQuery с «DATATYPE:„JSONP“» вариант.
Вы имеете в виду, escape html и вернуть его как константу строки? Похоже, хорошая идея, хотя добавление такого рода пост-обработки на сервере может быть сложным (я использую ruby на рельсах, но в java, который, как я знаю, не является тривиальным тоже). Во всяком случае, я попробую! –
В вашей среде должен быть JSON-кодер. – SLaks
Действительно, но он предполагает, что я возвращаю json, а не html. Кодирование все это довольно сложно (замена кавычек, разрывов строк и т. Д.), Но я уже в пути. –