سؤال

لا يتصرف Google chrome مثل المتصفحات الأخرى عند مواجهة هذه الكتلة:

<?php
while (true) {
    echo "<script type='text/javascript'>\n";
    echo "alert('hello');\n";
    echo "</script>";
    flush();

    sleep(5);
}
?>

يبدو أنه ينتظر انتهاء الاتصال قبل القيام بأي شيء.

بخلاف الاقتراع كيف يمكنني أن أفعل شيئًا مشابهًا في Google Chrome؟

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

المحلول

وبعض المتصفحات تتطلب عدد معين من وحدات البايت ليتم تحميلها قبل إصدار البيانات المتاحة. أتذكر آخر مرة حاولت أن تفعل ما تفعلونه انتهى بي الأمر إلى تفريغ شيء من هذا القبيل 300 مكان للتأكد من أن المتصفح عناء معها.

نصائح أخرى

وكان لي مشكلة مشابهة لهذه، وحلها عن طريق إضافة علامة HTML (في حالتي
) قبل كل دافق.

وتخميني سيكون أن كروم ينتظر عنصر <م> التي يتم عرضها لإغلاق قبل تسبب في إعادة تقديم. هذا على الرغم من مجرد تخمين.

وولا يبدو أن يتطلب 1024 بايت - وأعتقد أن لديهم أقل من 512 بايت عندما عملت

وكنت أتمنى لو كان الوصول إلى كروم في الوقت الراهن لاختبار بعض الأفكار. هل حاولت إضافة بعض HTML بعد </script> ورؤية ما اذا كان يجعل تدريجيا؟ أتصور أنه سيكون، وإذا كان الأمر كذلك سيكون ذلك دليلا على أن كروم لا تريد تشغيل جافا سكريبت في عناصر <script> في حين أن الصفحة يتم تحميل. وبطبيعة الحال، مما يجعل العلامات قد تؤدي البرامج النصية لتشغيل. إذا لم يكن كذلك، قد تتمكن من محاولة بما في ذلك جافا سكريبت كملفات الخارجية ومعرفة ما إذا كان يؤثر على وقت التنفيذ.

وأعتقد المتصفحات عموما بعض الفسحة وفقا للمواصفات في حين تبدأ تنفيذ جافا سكريبت، خصوصا أن تحميل الصفحة. قد لا يكون من الممكن القيام بذلك بطريقة عبر متصفح بالكامل دون الاقتراع.

هل تحدثت مع مطوري Chrome؟هل فتحت علة حول ذلك؟ أفضل حل IMHO هو جعل Chrome يتصرف مثل المتصفحات الأخرى، بدلاً من وجود حل بديل له.

حسنًا، في الواقع ربما ستحتاج إلى حل بديل قصير المدى.لكن تخيل عالمًا يتصرف فيه كل متصفح بشكل مختلف في كل جانب، مثل التعامل مع HTTP وHTML وCSS...لن يكون مكانًا لطيفًا!

وتيار يعمل. الجواب من eyelidlessness هي الحل.

والطباعة "2048 نقطة [BR> \ ن"؛

وو[= <

وتبدو BTW في عامل المستخدم. سفاري يحتاج بايت أكثر من اللازم. أعتقد 1024. فايرفوكس لا يحتاج بايت كثيرا.

<?php
$i = 0;
while (true) {
    if($i == 0) {
        echo "<html><body>";
    }
    echo "<script type='text/javascript'>\n";
        echo "alert('hello');\n";
    echo "</script>";
    if($i == 0 ) {
        $padstr = str_pad("",2048,"&nbsp;");
        echo $padstr;
        echo "</body></html>";
    }
    flush();

    sleep(5);
    $i = $i + 1;
}
?>

لالمرة الاولى ترسل 2048 على الأقل بايت من البيانات. بعد ذلك سوف تعمل بشكل جيد. وتأكد للحفاظ على العلامة النصي في علامة الجسم. والغريب في الأمر، في حالتي إذا أضيف 1024 بايت أنه يعمل. نأمل أن يكون هذا يساعدك

ووالبرنامج المذكور أعلاه على ما يرام في جوجل كروم.

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