2010-06-09 2 views
2

Я создаю 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“» вариант.

ответ

1

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

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

+0

Вы имеете в виду, escape html и вернуть его как константу строки? Похоже, хорошая идея, хотя добавление такого рода пост-обработки на сервере может быть сложным (я использую ruby ​​на рельсах, но в java, который, как я знаю, не является тривиальным тоже). Во всяком случае, я попробую! –

+0

В вашей среде должен быть JSON-кодер. – SLaks

+0

Действительно, но он предполагает, что я возвращаю json, а не html. Кодирование все это довольно сложно (замена кавычек, разрывов строк и т. Д.), Но я уже в пути. –

1

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

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

+0

Спасибо, но это накладывает необоснованные требования к типу сервера на веб-сайте.com, над которым я не контролирую. Но +1 для попытки в любом случае :) –

Смежные вопросы