تحميل عبر المجال XML مع جافا سكريبت باستخدام مفهوم Hybrid iFrame-Proxy / XSL / JSONP؟
-
18-09-2019 - |
سؤال
على موقعنا www.foo.com
نريد تنزيل واستخدام http://feeds.foo.com/feed.xml
مع جافا سكريبت. سوف نستخدم بوضوح صلاحية التحكم صلاحية الدخول ولكن بالنسبة للمتصفحات التي لا تدعم ذلك نحن ننظر فيما يلي ما يلي
على www.foo.com
, ، وضعنا document.domain
, ، تقديم وظيفة رد الاتصال وتحميل الأعلاف في (مخفية) iframe
:
document.domain = 'foo.com';
function receive_data(data) {
// process data
};
var proxy = document.createElement('iframe');
proxy.src = 'http://feeds.foo.com/feed.xml';
document.body.appendChild(proxy);
على feeds.foo.com
, ، إضافة XSL إلى feed.xml
واستخدامه لتحويل الخلاصة إلى مستند HTML الذي يحدد أيضا document.domain
ويستدعي وظيفة رد الاتصال في الوالد مع بيانات التغذية مثل JSON:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="ROOT">
<html><body>
<script type="text/javascript">
document.domain = 'foo.com';
parent.receive_data([<xsl:apply-templates/>]);
</script>
</body></html>
</xsl:template>
<!-- templates that transform data into json objects go here -->
</xsl:stylesheet>
هل هناك طريقة أفضل لتحميل XML من Feed.foo.com وما هي تداعيات هذا خدعة iFrame-Proxy / XSLT / JSONP؟ (.. وفي أي حالات سوف تفشل؟)
ملاحظات
- هذا لا يعمل في Safari & Chrome ولكن منذ كلاهما الدعم صلاحية التحكم صلاحية الدخول لا بأس.
- نريد تغيير القليل أو لا
feeds.foo.com
- نحن ندرك (ولكن غير مهتم ب) حلول وكيل Server-Side
- تحديث: كتب عنها
المحلول
إذا كانت لديك السيطرة على كلا النطاقات، فيمكنك تجربة مكتبة البرمجة النصية عبر المجال easyxdm., ، الذي يلف Quirks متصفح عبر الإنترنت ويوفر واجهة برمجة تطبيقية سهلة الاستخدام للتواصل في البرنامج النصي للعميل بين المجالات المختلفة باستخدام أفضل آلية متاحة لهذا المتصفح (على سبيل المثال بعد الاكتسم إذا كانت متوفرة، آليات أخرى إذا لم يكن).
التحذير: تحتاج إلى التحكم في كلا النطاقات من أجل جعلها تعمل (حيث "التحكم" يعني أنه يمكنك وضع ملفات ثابتة على كلا منهم). ولكن لا تحتاج إلى تغييرات رمز جانب الخادم.
تحذير آخر: هناك آثار أمنية هنا - تأكد من أنك تثق في البرنامج النصي للنطاق الآخر!
نصائح أخرى
يمكنك استخدام apis ياهو (yql.) .. فقط حدد عنوان URL والتنسيق والعدل
- طلبات المجال الصليب مع مسج بواسطة جيمس بادولسي
- مسج البرنامج المساعد
إنه نوع من محلول جانب الخادم، ومع ذلك ليس على الخادم الخاص بك :)