سؤال

SVG هي رسومات قائمة على XML ويمكنك إضافة JavaScripts إليها. لقد حاولت الوصول إلى وظائف البرنامج النصي المحددة في SVG. البرنامج النصي في SVG الخاص بي هو شيء من هذا القبيل:

<svg ... onload="RunScript(evt);"...>
<script type="text/javascript">
...
function RunScript(loadEvent) {
  // Get object in my html by id
  var objElement = top.document.getElementById('objid1');
  if (objElement)
  {
    // Extend object tag object's methods
    objElement.SVGsetDimension  = setDimension;
    ...
  }
  function setDimention(w, h) {...}

في ملف HTML الرئيسي الخاص بي ، يتم تضمين SVG في علامة كائن مثل هذا:

<object id="objid1" data="mygrahic.svg" ... >
<a href="#" onclick="document.getElementById('objid1').SVGsetDimention(10, 10);
   return false;"
...>Set new dimention</a>...

هذا واحد يعمل بشكل جيد. ومع ذلك ، إذا تمت الرجوع إلى ملف SVG XML بواسطة عنوان URL الكامل (على موقع آخر) مثل هذا:

<object id="objid1" data="http://www.artlibrary.net/myaccount/mygrahic.svg" ... >

الرموز لم تعد تعمل. يبدو أنه لا يمكنني إرفاق الطريقة المحددة في البرنامج النصي SVG الخاص بي بطريقة في عنصر علامة كائن HTML الرئيسي الخاص بي ، أو غير متوفر في هذه الحالة ، أو لا يمكن العثور نص SVG الخاص بي. هل هناك أي طريقة يمكنني القيام بها في البرنامج النصي SVG XML للعثور على عنصر HTML الخاص بي؟

لست متأكدًا مما إذا كانت هذه المشكلة ناتجة عن DOMs المختلفة ، ولا توجد طريقة لرموز البرنامج النصي SVG لمعرفة كائن أو عنصر DOM آخر. سيكون من الرائع إذا كان هناك أي حل.

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

المحلول

أعتقد أن الفكرة قد تكون في "على موقع آخر". هناك قواعد صارمة حول متى يُسمح لبرامج JavaScript من مواقع مختلفة بالتواصل مع Teach Other. يتم التعامل مع SVG المدمج بنفس الطريقة iframe سيكون.

نصائح أخرى

لذا ، ما تفعله هو ، من وجهة نظر المتصفح ، أي ما يعادل ما يلي:

<script>
function stealPassword() {
  var passwordInput = document.querySelector('input[type="password"]');
  var value = passwordInput.value; // My password!
  sendPasswordToServerToStealMyMoney(value);
}
</script>
<iframe src=mybank.com onload=stealPassword()></iframe>

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

PDC لديه هذا الحق. تعمل المتصفحات بجد لمنع هجمات البرمجة النصية عبر الموقع (XSS) وهذه هي النتيجة. لا يمكنك تنفيذ البرامج النصية في مستند تم تحميله من مجال آخر ، أو استخدام منفذ أو بروتوكول آخر. لمزيد من المعلومات يمكنك رؤيتها: http://en.wikipedia.org/wiki/same_origin_policy

من تجربتي رمزك صحيح ، بحيث يتم تشغيله بالضبط. جهاز الكمبيوتر الخاص بي Windows 7 ، IE9 ، تم تثبيت Adobe Viewer. كلاهما ما لم يكن SVG Viewer ، IE9 SVG يتم رسمه ، ولكن لا يمكن تشغيل الرسوم المتحركة لعلامة SVG ، يمكن فقط تشغيل الرسوم المتحركة JavaScript. لذلك ، تحت Windows XP ، IE8 ، تم تثبيت Adobe SVG Viewer ، نفس النتيجة (تشغيل بالضبط).

لا يمكن تشغيل Firefox SVG (SVG Ecmascript Animation) تمامًا تحت جهاز الكمبيوتر الخاص بي.

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