Как загрузить JavaScript, смешанный с HTML - PullRequest
0 голосов
/ 23 марта 2009

Так что мне нужно вытащить некоторый javascrit из удаленной страницы, которая имеет (бесполезный) html в сочетании с (полезным) javascript. Страница, назовите ее, http://remote.com/data.html, выглядит примерно так (без ума, я знаю):

<html>
<body>
<img src="/images/a.gif" />
<div>blah blah blah</div><br/><br/>
var data = { date: "2009-03-15", data: "Some Data Here" };

</body>
</html>

Итак, мне нужно загрузить эту переменную данных на моей локальной странице и использовать ее.

Я бы предпочел сделать это с полностью клиентским кодом. Я подумал, что если бы я мог получить html этой страницы в локальную переменную javascript, я мог бы разобрать код javascript, запустить eval для него и хорошо использовать данные. Поэтому я подумал загрузить удаленную страницу в iframe, но я не могу найти iframe в dom. Почему нет?:

<script>
alert(window.parent.frames.length);
alert(document.getElementById('my_frame'));
</script>

<iframe name="my_frame" id='my_frame' style='height:1px; width:1px;' frameBorder=0 src='http://remote.com/data.html'></iframe>

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

Ответы [ 2 ]

2 голосов
/ 23 марта 2009

Вы пробовали переключать порядок - т.е. сначала iframe, затем скрипт? Сценарий выполняется до того, как iframe будет вставлен в DOM.

Кроме того, у меня это сработало в аналогичной ситуации: дайте iframe обработчик загрузки:

<iframe src="http://example.com/blah" onload="do_some_stuff_with_the_iframe()"></iframe>

И последнее, но не менее важное: обратите внимание на проблемы межсайтового скриптинга - возможно, iframe загружен, но ваш JS может не иметь доступа к нему.

0 голосов
/ 23 марта 2009

Один из вариантов - использовать XMLHttpRequest для извлечения страницы, хотя очевидно в настоящее время реализуется только для межсайтовых запросов.

Я понимаю, что вы, возможно, захотите создать инструмент, использующий интернет-соединение клиента для получения html-страницы (в целях безопасности или по юридическим причинам), так что это законная надежда.

Если вам в конечном итоге понадобится сделать это на стороне сервера, то, возможно, простая страница php, которая принимает URL-адрес в качестве запроса и возвращает кусок json, содержащий скрипт в строке. Таким образом, если вы обнаружите, что вам нужно отфильтровать определенные веб-сайты, вам нужно сделать это только в одном месте.

Неизбежная проблема заключается в том, что некоторые пользователи будут враждебны, и тогда у них будет лицензия на злоупотребление тем, что фактически является прокси-сервером javascript. В результате самым безопасным вариантом может быть выполнение всей обработки на сервере и запрет на определенные вызовы функций javascript (eval, http запросы и т. Д.).

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