Давайте решим междоменный ajax полностью на клиенте, используя теги script - PullRequest
0 голосов
/ 15 февраля 2009

Я знаю, что есть JSONP, который включает взаимодействие с сервером для обработки пространства имен данных.

Меня беспокоит тот факт, что содержимое тега сценария src оценивается как , но доступно НЕ для чтения.

<script src="http://www.google.com"></script>

Все, что нам нужно выяснить, это как именовать пространство данных, вот и все. Конечно, я пробовал довольно идиотские вещи без соответствующего результата (я знаю, что это не работает, но вы видите, чего я пытаюсь достичь):

<script>eval('var namespace="');</script>
<script src="http://www.google.com"></script>
<script>eval('";');</script>

Так как на самом деле нет соответствующей информации о том, как оценивается контент src, я знаю, что это глобальная область, но если бы мы могли проследить шаги оценки или, возможно, цепочка каким-то образом уклоняется от области (не так много документации по этому поводу а также), мы могли бы решить эту досадную вещь " оценивается, но не читается ".

Есть идеи?

Ответы [ 3 ]

1 голос
/ 16 февраля 2009

HTML5 предоставляет window.postMessage, который предоставляет механизм для безопасного обмена сообщениями между доменами и поддерживается ночными браузерами Firefox 3, Opera 9.6 и WebKit.

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

 for (var i = 0; i < 10; i++) eval("; doSomething();");

станет

 for (var i = 0; i < 10; i++) ; doSomething();;

означает, что цикл for становится пустым, а doSomething будет вызван только один раз. Очевидно, что это приведет к невероятно трудному пониманию семантики, а также сделает его использование значительно менее безопасным, поскольку eval получит возможность напрямую влиять на поток управления.

1 голос
/ 15 февраля 2009

Я не уверен, что это вообще возможно из-за политик безопасности браузера.

0 голосов
/ 15 февраля 2009

Я склонен сказать, оставь это. Такого рода проблемы будут решены, но не путем взлома того, что у нас уже есть. Сеть в этом отношении в корне сломана. Тот факт, что любой сценарий из одного домена может быть выполнен в другом, является серьезной уязвимостью безопасности, которая будет препятствовать росту сети, если ее не остановить.

http://www.slideshare.net/webdirections/douglas-crockford-ajax-security-presentation

...