Ajax يعيد جافا سكريبت ليتم تحليله نتائج فقدان محتويات الصفحة

StackOverflow https://stackoverflow.com/questions/3809450

سؤال

لذلك كنت أعمل مؤخرًا على برنامج نصي لإلغاء الرمز من جانب العميل لحماية الملكية الفكرية دون التدخل في ظهور تفاعل الصفحة الناتجة. هذه العملية هي على النحو التالي:

  1. يأتي طلب http في. htaccess يعيد توجيه (.*) إلى parse_request.php
  2. Parse_request.php ينشئ فئة "phpurlparser" التي تكون متغيرات الفئة أساسًا نسخًا من متغيرات $ _server
  3. ينظر Phpurlparser إلى المسار المطلوب ، وأحيانًا يكون المضيف أو المرجع أو غيره من المعلومات من جانب الخادم لتحديد كيفية الرد. هناك العديد من الردود الممكنة

أ. كان الكائن المطلوب ملف .js أو .css. تمرير الملف إلى ضاغط Yui وأرسل الإخراج

ب. الكائن المطلوب هو صورة أو تطبيق. تمرير الملف دون تغيير

ج. يحتوي الكائن المطلوب على HTML. استبدل كل حرف ASCII بمكافئ سداسي عشري من رقمين وأرسل JavaScript التالي:

<script type="text/javascript">
var x="~lots of hex~";
var y="";
for(i=0; i<x.length; i+=2){
    y += unescape('%'+x.substr(i,2));
}
document.write(y);
</script>

لذلك يتم استبدال موقع الويب بالكثير من Hex و JavaScript الصغيرة لإعادة Hex إلى شكله الأصلي. لدي مثال على هذا الإعداد في أمثلة. عمل)

الآن للمشكلة:

كما اتضح ، هذا يعمل 99 ٪ من الوقت. لكن أجاكس يجعلها غاضبة. سيؤدي النقر فوق أحد أمثلة AJAX (ضمن "أنواع المحتوى الأخرى") إلى إعادة توجيهك إلى صفحة جديدة. ومع ذلك ، فإن النظر إلى شريط العناوين أو عرض مصدر الصفحة سيثبت أنك لا تزال على نفس الصفحة. سيؤدي استخدام أداة under element في Chrome (أو Firebug في Firefox) إلى أن محتويات صفحة الويب تم استبدالها بالكامل بمحتويات طلب AJAX.

إذا قمت بتعديل parse_request.php قليلاً للسماح بالملف الذي يطلبه Ajax تمريره عبر كل شيء ، كل شيء يعمل. لا مشكلة. لذلك لسبب ما ، فإن البرنامج النصي الذي يحل محل سلسلة Hex بنظيره HTML ذي معنى هو الكتابة فوق موقع الويب بأكمله بدلاً من إدخال نفسه بشكل جيد في حدود أu003Cdiv style=";text-align:right;direction:rtl"> هدف.

في الأساس ، HTML غير المتوقع غير المتوقع:

<html>
<head>
    ...
</head>
<body>
    <div id="colorbox">
        <INSERT AJAX HERE>
    </div>
    ...
</body>
</html>

مع وجود Ajax فقط ، أتوقع ما يلي:

<html>
<head>
    ...
</head>
<body>
    <div id="colorbox">
        <script type="text/javascript">
        var x="asdfasdfasdfasdf";
        var y="";
        for(i=0; i<x.length; i+=2){
            y += unescape('%'+x.substr(i,2));
        }
        document.write(y);
        </script>
    </div>
    ...
</body>
</html>

أتوقع أن يكتب خط المستند. write () y في موقع javaScript (داخلu003Cdiv style=";text-align:right;direction:rtl"> ). إذا كنت مخطئًا وهذا ليس كيف يعمل document.write () ، ما زلت أتوقع أن يكتب y في نهاية المستند. بدلاً من ذلك ، يتم استبدال المستند بأكمله بـ y. لماذا هذا ، وما هو الحل الخاص بي؟

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

المحلول

جرب شيئًا كهذا:

<html> 
<head> 
    ... 
</head> 
<body> 
    <div id="colorbox">
        <div id="MYAJAXCONTENT">
        </div>
        <INSERT AJAX HERE> 
    </div> 
    ... 
</body> 
</html> 

<html> 
<head> 
    ... 
</head> 
<body> 
    <div id="colorbox"> 
        <script type="text/javascript"> 
        var x="asdfasdfasdfasdf"; 
        var y=""; 
        for(i=0; i<x.length; i+=2){ 
            y += unescape('%'+x.substr(i,2)); 
        } 
        document.getElementById('MYAJAXCONTENT').innerHTML = y; 
        // for the jQuery psychos out there
        // $('#MYAJAXCONTENT').html(y);
        </script> 
    </div> 
    ... 
</body> 
</html> 

نصائح أخرى

أجب على سؤالك الأخير: الاتصال

document.write ('my_precious_html_code') ؛

سيتم إلحاق النص أو تجاوزه على الصفحة اعتمادًا على الوقت الذي تم استدعاؤه (قبل أو بعد حدث Onload). يجب ألا تستخدمه أي النصي. قراءة المزيد عنها هنا: http://javaScript.crockford.com/script.html

الإجابة العامة: تعبئة رمز HTML لا معنى له. تمامًا مثل حماية الصور عن طريق تعطيل زر الماوس الأيمن في أواخر 90. استغرق الأمر مني أقل من 3 ثوانٍ "لتكسير" رمزك المحشور والحصول على HTML المنسقة بشكل جميل. كما يتم تقديم موقعك في وضع المراوغات ربما هو شيء لا تريده.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top