قم بتحميل ملفات JavaScript عن بعد عبر شريط العناوين

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

  •  04-10-2019
  •  | 
  •  

سؤال

هل من الممكن تحميل ملفات JavaScript عن بعد من شريط العناوين؟

لقد كنت أحاول وضع هذا في شريط العناوين:

javascript:src='http://depot.com/file.js';funcname();

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

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

المحلول

أعتقد أنك يجب أن تكون قادرًا على القيام بما يلي:

javascript:(function () {
  var newScript = document.createElement('script');
  newScript.type = 'text/javascript';
  newScript.src = 'http://depot.com/file.js';
  document.getElementsByTagName('body')[0].appendChild(newScript);
})();

إليك مثال مفيد جدًا (صق هذا في شريط العناوين الخاص بك):

javascript:(function () {
  var newScript = document.createElement('script');
  newScript.type = 'text/javascript';
  newScript.src = 'http://cornify.com/js/cornify.js';
  document.getElementsByTagName('body')[0].appendChild(newScript);

  for (var i = 0; i < 5; i++) {
    newScript = document.createElement('script');
    newScript.type = 'text/javascript';
    newScript.src = 'http://cornify.com/js/cornify_run.js';
    document.getElementsByTagName('body')[0].appendChild(newScript);
  }
})();

هاهو:

Stack Overflow cornified

في الواقع ، هذا هو كيف cornify.com بما في ذلك البرامج النصية البعيدة في المرجعية الخاصة بهم.


تحديث:

كما لاحظت ben في الإجابة الأخرى, ، ليس من السهل استدعاء وظيفة محددة في البرنامج النصي عن بُعد. يقترح Ben أحد الحلول لهذه المشكلة ، ولكن هناك أيضًا حل آخر ، وهو الحل الذي يستخدمه Cornify. إذا قمت بالتحقق من http://cornify.com/js/cornify_run.js سترى أن هناك استدعاء وظيفة واحدة فقط في هذا الملف. يمكنك وضع الخاص بك funcname() اتصل في ملف JavaScript منفصل ، كما يفعل Cornify ، لأن كتل البرنامج النصي مضمونة لتنفيذها بالترتيب الذي يتم إدراجه. ثم يجب عليك تضمين كلا النصوص ، كما في المثال التالي:

javascript:(function () {
  var newScript = document.createElement('script');
  newScript.type = 'text/javascript';
  newScript.src = 'http://depot.com/file.js';
  document.getElementsByTagName('body')[0].appendChild(newScript);

  newScript = document.createElement('script');
  newScript.type = 'text/javascript';
  newScript.src = 'http://depot.com/file_run.js';
  document.getElementsByTagName('body')[0].appendChild(newScript);
})();

أين ال file_run.js ببساطة يتضمن مكالمة إلى funcname().

نصائح أخرى

ليس إجابة مباشرة ، ولكن مفيد رغم ذلك.

فيما يلي برنامج نصي للتحميل في ملف JavaScript عند استخدامه في إشارة مرجعية:

javascript:var%20e=document.createElement('script');e.setAttribute('language','javascript');e.setAttribute('src','http://github.com/balupton/ajaxy-bookmark/raw/master/script.js');document.body.appendChild(e);void(0);

لا توجد طريقة مباشرة للقيام بذلك ، ومع ذلك فإن الاختراق الشائع هو تشغيل بضعة أسطر من JavaScript التي تدرج علامة في الصفحة الحالية ، وتضع سمة SRC الخاصة بها على عنوان URL للنص الذي تريد تشغيله:

javascript:var s=document.createElement("script");s.src="http://depot.com/file.js";s.type="text/javascript";document.getElementsByTagName("body")[0].appendChild(s);

إذا كنت ترغب في تشغيل وظيفة محددة في الملف البعيد (à la funcname() في سؤالك) ، هذا أمر صعب قليلاً. وذلك لأن تحميل البرامج النصية عبر علامة يتم تشغيلها بشكل غير متزامن ، وبالتالي لم ينته الملف على الأرجح من تحميل العنصر على الفور إلى DOM. الطريقة الوحيدة التي يمكنني التفكير بها في الالتفاف حول هذا الأمر هي تحديد بعض الوظائف قبل إدخال العنصر ، الذي تتصل به بعد ذلك في نهاية الملف المصدر المضمون:

function doStuff() {
    // run code that depends on the included JS file
};
// include the external script, as per the snippet above

يمكنك بعد ذلك تضمين مكالمة إلى doStuff في نهاية الملف المضمن:

if(doStuff) doStuff();

النتيجة النهائية تبدو مثل هذا:

javascript:function doStuff(){funcname()};var s=document.createElement("script");s.src="http://depot.com/file.js";s.type="text/javascript";document.getElementsByTagName("body")[0].appendChild(s);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top