سؤال

أستخدم حاليًا IFrame لوضع الحماية للمحتوى الذي أنشأه المستخدم على موقع الويب.يؤدي هذا إلى التخلص من أي مشكلات تتعلق بالتصميم في أوراق الأنماط الرئيسية لدينا.

ومع ذلك، عندما يقوم المستخدم بإنشاء رابط باستخدام محرر النص المنسق الخاص بنا، نود أن يتم فتح الرابط في الأصل وليس فقط فتح الرابط في IFrame.أدرك أنه يمكنك تحديد هدف للوالد، ولكن ليس لدينا سيطرة على المستخدم وما يدخله في المحتوى الخاص به.

هل هناك أي طريقة لاختطاف HREFs داخل IFrame بحيث تستهدف جميعها الأصل دون تعديلها؟أو استخدم القليل من Javascript الذي يمكن إدخاله عالميًا حتى لا أحتاج إلى مسح كل المحتوى واستبدال الهدف برمجيًا؟

من الناحية المثالية، سيكون الحل الأفضل هو وجود نص بسيط في مكان واحد.

أفكار؟

الحل النهائي

لقد استخدمت صيغة مختلفة للإجابة التي اخترتها ...لقد جعلني في الاتجاه الصحيح.

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

هذا داخل IFrame مع المحتوى.وانتهى الأمر بأن يكون الحل الأكثر بساطة لهذه المهمة.

هل كانت مفيدة؟

المحلول

استخدم هذا لإنشائه وسيكون لديك إمكانية الوصول إلى أي أجزاء تحتوي على المتغير $body:

$(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

نصائح أخرى

نفس المجال في 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>

ينتج عنه "تم رفض الإذن للحصول على الخاصية HTMLDocument.getElementsByTagName".

قد تكون هناك طرق للتغلب على ذلك، ولكن على الأقل باستخدام جافا سكريبت البسيط، تتوفر بعض الحماية ضد إطارات iframe التي تعبث بالمواقع (تخيل إطارًا ضارًا حول موقع الويب الخاص بالبنك ويمكنك فهم السبب).

لقد تجاوزت مشكلة النطاق المتقاطع عبر 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>

وبما أنه لا يمكن الوصول إلى الإطار الأصلي، فقد قمت باستبدال الجسم عبر أجاكس.

أبسط إجابة:

<head>
    <base target="_blank">
</head>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top