2009-08-04 2 views
2

В настоящее время я использую IFrame для создания содержимого с песочницей на веб-сайте. Это устраняет любые проблемы с дизайном с помощью наших основных таблиц стилей.Принудительно использовать любой HREF в IFrame, чтобы использовать его родительский объект в качестве цели

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

Есть ли способ захватить HREF внутри IFrame, чтобы все они нацелились на родителя, не изменяя их? Или используйте немного Javascript, который можно было бы вводить повсеместно, поэтому мне не нужно очищать весь контент и программно менять цель?

В идеале простой сценарий в одном месте будет лучшим решением.

Мысли?

END РЕШЕНИЕ

Я использовал вариант ответа, который я выбрал ... Он получил меня в правильном направлении.

<script> 
    Event.observe(window, 'load', function() { 
    $$('a').each(function(e) { 
     e.writeAttribute('target', '_parent'); 
    }); 
    }); 
</script> 

Это внутри IFrame с контентом. Это оказалось самым простым решением этой задачи.

ответ

2

Используйте это, чтобы создать его, и вы будете иметь доступ к любой части с переменной $ тела:

$(function() { 
     var $frame = $('<iframe style="width:200px; height:100px;">'); 
     $('body').html($frame); 
     setTimeout(function() { 
      var doc = $frame[0].contentWindow.document; 
      var $body = $('body',doc); 
      $body.html('<h1>Test</h1>'); 
     }, 1); 
    }); 

Таким образом, вы можете сделать что-то вроде этого

$('a', $body).attr('target', '_parent'); 

Найдено здесь: http://groups.google.com/group/jquery-en/browse_thread/thread/fb646741a6192540

+0

Pardon мое невежество и отсутствие Javacript-фу, но, учитывая этот кусок кода, оказывается, что это построение IFrame и содержание внутри него, верно? Где вступает в действие форсирование цели на HREF. Ваш ответ перед редактированием дал мне немного больше смысла. – mwilliams

+0

Ahhhh ok, я не могу идти в ногу с вашими изменениями :) Будет ли это сделать ... Спасибо! – mwilliams

+0

Я стараюсь редактировать ... много. В основном из-за быстрого темпа форумов –

1

Тот же домен в iframe? Да.

<script type="text/javascript"> 
function hijacklinks(iframe){ 
    var as = iframe.contentDocument.getElementsByTagName('a'); 
    for(i=0;i<as.length;i++){ 
    as[i].setAttribute('target','_parent'); 
    } 
} 
</script> 

<iframe src="http://example.com/test.html" onload="hijacklinks(this)"></iframe> 

Другой домен в iframe? Номер

<iframe src="http://www.google.com/search?q=google+happy" onload="hijacklinks(this)"></iframe> 

дает "Permission Denied, чтобы получить свойство HTMLDocument.getElementsByTagName".

Возможно, существуют способы, но, по крайней мере, с простым JavaScript, некоторые из них защищают от iframe, удаляющих сайты (представьте себе вредоносный фрейм вокруг веб-сайта банка, и вы можете понять, почему).

0

меня вокруг вопроса перекрестного домена с помощью AJAX ..

function runAjaxDone(response) { 
      $('body').html(response); 
     } 
     function callAjax(url) { 
      $.ajax({ url: url + '&r=' + Math.random(), success: runAjaxDone }); 
      return false; 
     } 

<a runat="server" href="#" 
         onclick='<%# "callAjax(\"http://partners.thevoiceinternet.com/portal/Customer/Report/AgentReport.aspx?AgentID="+Eval("AgentID").ToString()+"&name="+Server.UrlEncode(Eval("SubAgentName").ToString())+"\"); return false;" %>'> 
         <asp:Label ID="lbl" runat="server" Text='<%# Eval("SubAgentName") %>'></asp:Label></a> 

Поскольку родительский фрейм не может получить доступ, я заменил тело через AJAX.

0

Простейшее Ответ:

<head> 
    <base target="_blank"> 
</head>