كيف يمكنني تحويل سلسلة من HTML إلى كائن DOM في ملحق Firefox؟

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

  •  08-06-2019
  •  | 
  •  

سؤال

أقوم بتنزيل صفحة ويب (علامة حساء HTML) باستخدام XMLHttpRequest وأريد أخذ الإخراج وتحويله إلى كائن DOM يمكنني بعد ذلك تشغيل استعلامات XPATH عليه.كيف يمكنني التحويل من سلسلة إلى كائن DOM؟

يبدو أن الحل العام هو إنشاء إطار iframe مخفي وإلقاء محتويات السلسلة فيه.كان هناك يتحدث من التحديث DOMParser لدعم النص/html ولكن اعتبارًا من Firefox 3.0.1 لا تزال تحصل على NS_ERROR_NOT_IMPLEMENTED إن جربت.

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

هذا هو مثال على سبب بحثي عن حل آخر غير اختراق iframe، إذا كان لا بد لي من الكتابة الجميع هذا الرمز للحصول على حل قوي، فأنا أفضل الاستمرار في البحث عن شيء آخر.

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

المحلول

في الواقع كان لدى أياكسيان منشور حول إدراج/استرداد HTML من iframe اليوم.ربما يمكنك استخدام مقتطف js الذي نشروه هناك.

أما بالنسبة للتعامل مع إغلاق المتصفح/علامة التبويب، فيمكنك إرفاق onbeforeunload (http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx) الحدث وافعل كل ما عليك القيام به.

نصائح أخرى

جرب هذا:

var request = new XMLHttpRequest();

request.overrideMimeType( 'text/xml' );
request.onreadystatechange = process;
request.open ( 'GET', url );
request.send( null );

function process() { 
    if ( request.readyState == 4 && request.status == 200 ) {
        var xml = request.responseXML;
    }
}

لاحظ ال overrideMimeType و ResponseXML.
ال readyState == 4 قد اكتمل'.

حاول إنشاء div

document.createElement( 'div' );

ثم قم بتعيين علامة حساء HTML على HTML الداخلي لـ div.يجب أن يقوم المتصفح بمعالجة ذلك إلى XML، والذي يمكنك بعد ذلك تحليله.

تأخذ خاصية InnerHTML سلسلة تحدد مجموعة صالحة من النص والعناصر.عند تعيين خاصية InnerHTML ، تحل السلسلة المحددة محل المحتوى الموجود للكائن.إذا كانت السلسلة تحتوي على علامات HTML ، يتم تحليل السلسلة وتنسيقها عند وضعها في المستند.

هل تريد تنزيل صفحة ويب ككائن XML باستخدام جافا سكريبت، لكنك لا تريد استخدام صفحة ويب؟نظرًا لأنه ليس لديك أي سيطرة على ما سيفعله المستخدم (إغلاق علامات التبويب أو النوافذ أو غير ذلك)، فستحتاج إلى القيام بذلك مثل أداة OSX Dashboard أو بعض التطبيقات المنفصلة.قد يعمل امتداد Firefox أيضًا، إلا إذا كان عليك القلق بشأن قيام المستخدم بإغلاق المتصفح.

هل هناك أي خيار إلى جانب استخدام خدعة iframe المخفية؟

لسوء الحظ، لا، ليس الآن.وإلا فإن رمز الملخص الجزئي الذي تشير إليه سيستخدمه بدلاً من ذلك.

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

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

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

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