Загрузка содержимого HTML, содержащего встроенный скрипт, через jQuery - PullRequest
2 голосов
/ 02 ноября 2009

Фон

  • Я запускаю сайт ASP.NET с использованием Graffiti CMS для местной благотворительной / сервисной организации.
  • Руководители организации хотят начать интеграцию сторонней серверной системы управления, которая предоставляет контент в виде полных HTML-страниц.
  • Одна из страниц, список офицеров, использует встроенный скрипт для загрузки картинок или заполнителей (в зависимости от того, существует ли картинка для данного офицера).
  • Я создал прокси на стороне сервера, который позволяет загружать контент с этих страниц с помощью функции .load() AJAX jQuery.
  • Я могу нормально отображать этот контент с помощью iframe, но это выглядит очень неуклюже, и если размер содержимого меняется, мне может понадобиться изменить размер iframe, чтобы все это отображалось (блин!).

Проблема

Если я создаю <div> в посте Graffiti и использую $("#divid").load(url) для загрузки контента, контент HTML загружается нормально, но встроенный скрипт удаляется, поэтому не отображаются ни изображения офицеров, ни заполнители.

Вопрос

Понимание того, что причина проблемы в том, что jQuery почти наверняка пытается защитить от потенциально плохих вещей, удаляя встроенный скрипт перед загрузкой его в свой DOM, есть ли способ использовать jQuery для захвата этого HTML и загрузки его в мой DOM, который сохранит скрипт, но не откроет серьезные дыры в безопасности? Я доверяю системе, из которой загружаю контент, если это имеет значение.

Предложения? Я стараюсь сделать это как можно более простым ... что-нибудь слишком сложное, и я так же хорошо, чтобы придерживаться iframe.

Заранее спасибо!

@ devhammer

Ответы [ 3 ]

3 голосов
/ 02 ноября 2009

При использовании document.write возникает проблема. Если у вас есть возможность изменять исходные страницы, вы можете изменить их, чтобы вместо этого использовать метод innerHtml.

Для этого вы должны изменить что-то вроде этого:

<div id="testDiv">
  <script type="text/javascript">
    document.write("<img src='image1.jpg' alt='' />");
  </script>
</div>

К этому:

<div id="testDiv">
<div>
<script type="text/javascript">
  document.getElementByid('testDiv').innerHTML = "<img src='image1.jpg' alt='' />";
</script>
0 голосов
/ 02 ноября 2009

у меня не работает ...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title></title>
    </head>
    <body>
        <script src="Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                var dynamic = 'begin <script type="text/javascript">alert("hello");<\/script> end';
                $('#test').html(dynamic);
            });
        </script>
        <div id="test"></div>
    </body>
</html>

Появляется окно с предупреждением ... но если вы замените его на document.write, в документе ничего не появится.

Надеюсь, это поможет!

0 голосов
/ 02 ноября 2009

Попробуйте установить HTML вручную, например:

$.get(url, function(htmlText) { $('#divid').html(htmlText); });

Я почти уверен, что это выполнит сценарии.

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