Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   Chromium: кросс-доменный запрос от локального скрипта (https://javascript.ru/forum/css-html-browser/32825-chromium-kross-domennyjj-zapros-ot-lokalnogo-skripta.html)

rince 31.10.2012 15:59

Chromium: кросс-доменный запрос от локального скрипта
 
Реально ли вообще? Пробовал все что нагуглил, ничего не вышло.
Браузер кастомный на основе хромиума, но политика безопасности не тронута.
Скрипт запускается от local://nonexistant-localdir/
upd: на основе awesomium

melky 31.10.2012 16:35

Цитата:

Сообщение от rince (Сообщение 213267)
Реально ли вообще? Пробовал все что нагуглил, ничего не вышло.
Браузер кастомный на основе хромиума, но политика безопасности не тронута.
Скрипт запускается от local://nonexistant-localdir/
upd: на основе awesomium

запустить надо, добавив эти 2 флага :
1. --allow-file-access-from-files
2. --disable-web-security

rince 31.10.2012 19:10

У меня нет возможности запускать этот браузер с флагами.

Случайно нашел решение через <iframe>, если кому интересно:
1. фрейм загружает локальный request.html
2. request.html загружает внешний скрипт (там запрос заместо имени скрипта)
3. хттп-сервер обрабатывает запрос и подсовывает нужный скрипт с ответом
4. фрейм изначально локальный, так что same-origin-policy не брыкается, можно тупо получить его содержимое.

Что интересно, так это когда я пытался использовать window.name-транспорт, загружать локальный файл мне не позволяло, а так норм.

rince 31.10.2012 19:41

Таки этот способ работает только если запросы однотипные и статические, при чем для каждого свой реквест-файл. Но можно ли сделать динамические запросы? Как-то отредактировать содержимое фрейма и перезагрузить его с новым?

rince 02.11.2012 03:38

В итоге сделал так:
function request(str) {	
	var js = document.createElement('script');
	js.setAttribute('type', 'text/javascript');
	js.setAttribute('src', filename);
	js.setAttribute('defer', 'defer');
	document.getElementsByTagName('HEAD')[0].appendChild(js);
}


По сути подключаю новые скрипты, которые генерирует самописный http-сервер, и которые просто записывают нужные данные в нужные переменные.
Потестил, на вид решение отличное, но здравый смысл подсказывает, что что-то не так. Эти скрипты выполняются лишь 1 раз, но куда деваются потом? Не будет ли утечек?

BallsShaped 02.11.2012 08:28

Это называется JSONP.


Часовой пояс GMT +3, время: 05:02.