2009-09-27 5 views
1

Я ищу метод легкого веса для клиентских сторон, содержащий файлы HTML. В частности, я хочу, чтобы на стороне клиента были включены страницы публикации researchr.org, на сторонних веб-страницах. Например, я хотел бы экспортировать страницу какЕсть ли легкий способ HTML-HTML на стороне клиента?

http://researchr.org/profile/eelcovisser/publications 

Использование IFRAME, то можно включить HTML-страницы (возможно только в окне публикации этой страницы.):

<iframe class="foo" style="height: 50em;" width="100%" frameborder="0" 
    src="http://researchr.org/profile/eelcovisser/publications"> 
</iframe> 

Однако для iframe требуется спецификация фиксированной высоты, а страницы, которые я экспортирую, не имеют фиксированной высоты. Результат имеет некрасивый скроллбар:

http://swerl.tudelft.nl/bin/view/EelcoVisser/PublicationsResearchr 

я нашел одну ссылку на метод, который, как представляется, быть привлекательным

http://www.webdeveloper.com/forum/archive/index.php/t-26436.html 

Он использует IFRAME импортировать HTML, а затем яваскрипт звонка от включенного документ к функции, определенной во включенном документе, который помещает содержимое тела включенного файла в div содержащего файл. Это не работает в моем сценарии, вероятно, из-за той же политики происхождения для javascript, то есть включенная и включенная страница не из одного домена (что является целым).

Любые идеи для решения этой проблемы? Какой может быть:

  • CSS-трюк, чтобы сделать высоту фрейма гибкой
  • Javascript техника поднять содержимое фрейма в DIV в том числе страницы
  • какой-то другой подход, I» ve упустил

Требование: код включения должен быть минимальным.

ответ

0

Насколько я знаю, нет трюков CSS, единственный способ - запросить документ iFrame.documentElement.offsetHeight или scrollHeight, в зависимости от того, что выше, принять это значение и применить его на высоте css iframe (добавить + 'px').

0

Если вы используете JQuery, вы можете использовать метод load для получения страницы с помощью AJAX, возможно скрести содержание от него, и ввести его в существующий элемент. Единственная проблема заключается в том, что для этого требуется JavaScript.

0

Почему вы не используете AJAX?

Попробуйте это:

<div id="content"></div> 

<script type="text/javascript"> 

function AJAXObj() { 
    var obj = null; 
    if (window.XMLHttpRequest) { 
     obj = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
     obj = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    return obj; 
} 

var retriever = new AJAXObj(); 

function getContent(url) 
{ 
    if (retriever != null) { 
     retriever.open('GET', url, true); 
     retriever.onreadystatechange = function() { 
      if (retriever.readyState == 4) { 
       document.getElementsById('content').innerHTML(retriever.responseText); 
      } 
     } 
     retriever.send(null); 
    } 
} 

getContent('http://researchr.org/profile/eelcovisser/publications'); 

</script> 

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

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

+1

«Почему бы вам не использовать AJAX?» ... потому что содержимое находится в другом домене ... – James

+1

Вы можете использовать прокси, чтобы обойти эту проблему. – ceejayoz

+0

Также размещает требование JS, а проксирование может быть высокопроизводительным – annakata

2

Нет. Политика одинакового происхождения не позволяет вам делать что-либо из этого материала (и правильно).Вам нужно будет перейти на серверную сторону, иметь сценарий на вашем сервере, чтобы получить доступ к этой странице и скопировать ее содержимое на свою страницу (предварительно на время сборки/в фоновом режиме, вы могли бы сделать это во время доступа или через AJAX, но это будет включать в себя много выскабливание трафика между сервером и у них, которые не могут быть оценены.

или просто мириться с скроллинга или сделать IFrame очень высокий.

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