اختبر الكود التالي (العرض التوضيحي) في المتصفحات IE6 ، IE7 ، Firefox2+، Firefpx3+، Opera9.6+، Safari3.1+:
<div id = test>
<a href =#> اختبار </a>
</div>
<div id = result> </viv>
<script type = text/javaScript>
(وظيفة(){
var test = document.getElementById ('test') ؛
تنبيه (test.innerhtml) ؛
var result = document.getElementById ('result') ؛
result.innerhtml = test.innerhtml ؛
تنبيه (result.innerhtml)
}) () ؛
</script>
نتيجة لذلك ، سيجد أن قيمة HREF للعنصر A في النتيجة.
في الواقع ، واجه أسلافنا هذه المشاكل منذ فترة طويلة (بفضل Yu Bo للمعلومات المقدمة):
تم ذكر حل المعالجة في المقالة أعلاه ، والتي تتمثل في استخدام طريقة getAttribute ('HREF' ، 2) تحت IE. تقوم Microsoft بتوسيع المعلمة الثانية إلى هذه الطريقة ، والتي يمكن ضبطها على 0 ، 1 ، 2 ، وإذا تم ضبطها على 2 ، يتم إرجاع القيمة الأصلية للخاصية.
يتم إصلاح البرنامج النصي إلى:
(وظيفة(){
var test = document.getElementById ('test') ؛
تنبيه (test.innerhtml) ؛
var result = document.getElementById ('result') ؛
result.innerhtml = test.innerhtml ؛
if (/*@cc_on!@*/0) {// إذا
var links1 = test.getElementsByTagName ('a') ؛
var links2 = result.getElementSbyTagName ('a') ؛
لـ (var i = 0 ، len = links1.length ؛ i <len ؛ ++ i) {
links2 [i] .href = links1 [i] .getAttribute ('href' ، 2) ؛
}
}
تنبيه (result.innerhtml) ؛
}) () ؛
في عملية العثور على هذه المشكلة ، بحثت أيضًا عن خطأ مثير للاهتمام وجدته Hedger Wang: عندما تتم إعادة ضبط قيمة سمة HREF الجديدة في IE ، إذا كان نص الارتباط يحتوي على http: // أو @، سيتم عرض InnerHTML بشكل غير صحيح وسيتم عرضه كسممة HREF المحددة.
الحل البديل (SHREF هي القيمة الجديدة لـ HREF المراد تعيينها):
shref = 'http://www.hedgerwow.com' ؛
var ismsie = /*@cc_on!@* /false ؛
إذا (ismsie) {
shref = '' + shref ؛ // أضف مساحة إضافية قبل HREF الجديد
} ؛
التفاصيل: "قد يقوم Internet Explorer بإعادة ضبط InnerHTML من المرساة بشكل غير صحيح عند تعيين HREF جديد"