বর্তমানে সম্পাদনকারী স্ক্রিপ্টটি লোড করা স্ক্রিপ্ট ট্যাগকে আমি কীভাবে উল্লেখ করতে পারি?


303

বর্তমানে যে জাভাস্ক্রিপ্টটি লোড হয়েছে সেই স্ক্রিপ্ট উপাদানটিকে আমি কীভাবে উল্লেখ করতে পারি?

পরিস্থিতি এখানে। পৃষ্ঠায় উচ্চতর লোড করা হচ্ছে আমার একটি "মাস্টার" স্ক্রিপ্ট, প্রথমটি হেড ট্যাগের অধীনে।

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type="text/javascript" src="scripts.js"></script>

"স্ক্রিপ্টস.জেএস" এ একটি স্ক্রিপ্ট রয়েছে যা অন্যান্য স্ক্রিপ্টগুলির অন-চাহিদা লোডিং করতে সক্ষম হতে হবে। স্বাভাবিক পদ্ধতিটি আমার পক্ষে বেশিরভাগ ক্ষেত্রে কার্যকর হয় না কারণ হেড ট্যাগটি উল্লেখ না করেই আমাকে নতুন স্ক্রিপ্ট যুক্ত করতে হবে, কারণ হেড উপাদানটি রেন্ডারিং শেষ করেনি:

document.getElementsByTagName('head')[0].appendChild(v);

আমি যা করতে চাই তা হ'ল স্ক্রিপ্ট উপাদানটি যা বর্তমান স্ক্রিপ্টটি লোড করেছে যাতে আমি এর পরে আমার নতুন গতিশীল লোড হওয়া স্ক্রিপ্ট ট্যাগগুলি ডিওএম-এ যুক্ত করতে পারি।

<script type="text/javascript" src="scripts.js"></script>
loaded by scripts.js--><script type="text/javascript" src="new_script1.js"></script>
loaded by scripts.js --><script type="text/javascript" src="new_script2.js"></script>

1
সতর্কতার শব্দ: এটি লোড হওয়ার সময় ডিওএম সংশোধন করা আপনাকে আইই 6 এবং আই 7 এর এক জগতের ক্ষতি করতে পারে । আপনি পৃষ্ঠা লোডের পরে সেই কোডটি চালানো আরও ভাল।
ট্রিপটিচ

6
দেখে মনে হচ্ছে এটি এখন ক্যানিয়াসে চলেছে
টাইলার

উত্তর:


653

কীভাবে বর্তমান স্ক্রিপ্ট উপাদানটি পাবেন:

1. ব্যবহার করুন document.currentScript

document.currentScript<script>যার স্ক্রিপ্টটি বর্তমানে প্রক্রিয়াজাত হচ্ছে সেই উপাদানটি ফিরিয়ে দেবে ।

<script>
var me = document.currentScript;
</script>

উপকারিতা

  • সহজ এবং স্পষ্ট। নির্ভরযোগ্য।
  • স্ক্রিপ্ট ট্যাগটি পরিবর্তন করার দরকার নেই
  • অ্যাসিনক্রোনাস স্ক্রিপ্ট ( deferএবং async) এর সাথে কাজ করে
  • স্ক্রিপ্টগুলি গতিশীল sertedোকানো দিয়ে কাজ করে

সমস্যা

  • পুরানো ব্রাউজার এবং আইই তে কাজ করবে না।
  • মডিউল নিয়ে কাজ করে না <script type="module">

২. আইডি দ্বারা স্ক্রিপ্ট নির্বাচন করুন

স্ক্রিপ্টটিকে একটি আইডি বৈশিষ্ট্য দেওয়া আপনাকে ব্যবহারের মধ্য থেকে সহজেই আইডি দ্বারা এটি নির্বাচন করতে দেয় document.getElementById()

<script id="myscript">
var me = document.getElementById('myscript');
</script>

উপকারিতা

  • সহজ এবং স্পষ্ট। নির্ভরযোগ্য।
  • প্রায় সর্বজনীন সমর্থিত
  • অ্যাসিনক্রোনাস স্ক্রিপ্ট ( deferএবং async) এর সাথে কাজ করে
  • স্ক্রিপ্টগুলি গতিশীল sertedোকানো দিয়ে কাজ করে

সমস্যা

  • স্ক্রিপ্ট ট্যাগে একটি কাস্টম বৈশিষ্ট্য যুক্ত করা প্রয়োজন
  • id বৈশিষ্ট্য কিছু প্রান্তের ক্ষেত্রে কিছু ব্রাউজারে স্ক্রিপ্টগুলির জন্য অদ্ভুত আচরণের কারণ হতে পারে

৩. কোনও data-*বৈশিষ্ট্য ব্যবহার করে স্ক্রিপ্টটি নির্বাচন করুন Select

স্ক্রিপ্টটিকে একটি data-*বৈশিষ্ট্য দেওয়া আপনাকে এটিকে সহজেই তার মধ্যে থেকে নির্বাচন করতে দেয়।

<script data-name="myscript">
var me = document.querySelector('script[data-name="myscript"]');
</script>

পূর্ববর্তী বিকল্পের তুলনায় এর কয়েকটি সুবিধা রয়েছে।

উপকারিতা

  • সহজ এবং স্পষ্ট।
  • অ্যাসিনক্রোনাস স্ক্রিপ্ট ( deferএবং async) এর সাথে কাজ করে
  • স্ক্রিপ্টগুলি গতিশীল sertedোকানো দিয়ে কাজ করে

সমস্যা

  • স্ক্রিপ্ট ট্যাগে একটি কাস্টম বৈশিষ্ট্য যুক্ত করা প্রয়োজন
  • এইচটিএমএল 5, এবং querySelector()সমস্ত ব্রাউজারে অনুগত নয়
  • idঅ্যাট্রিবিউটটি ব্যবহার করার চেয়ে কম ব্যাপকভাবে সমর্থিত
  • প্রান্ত মামলা <script>সঙ্গে প্রায় পাবেন id
  • অন্য উপাদানের পৃষ্ঠায় একই ডেটা বৈশিষ্ট্য এবং মান থাকলে বিভ্রান্ত হতে পারে get

৪. এসসিআর দ্বারা স্ক্রিপ্টটি নির্বাচন করুন

ডেটা অ্যাট্রিবিউট ব্যবহার করার পরিবর্তে, আপনি উত্স অনুসারে স্ক্রিপ্টটি চয়ন করতে নির্বাচকটি ব্যবহার করতে পারেন:

<script src="//example.com/embed.js"></script>

এম্বেড.জেএস এ:

var me = document.querySelector('script[src="//example.com/embed.js"]');

উপকারিতা

  • বিশ্বাসযোগ্য
  • অ্যাসিনক্রোনাস স্ক্রিপ্ট ( deferএবং async) এর সাথে কাজ করে
  • স্ক্রিপ্টগুলি গতিশীল sertedোকানো দিয়ে কাজ করে
  • কোনও কাস্টম বৈশিষ্ট্য বা আইডি দরকার নেই

সমস্যা

  • না না স্থানীয় স্ক্রিপ্ট কাজ
  • উন্নয়ন এবং উত্পাদনের মতো বিভিন্ন পরিবেশে সমস্যা সৃষ্টি করবে
  • স্থির এবং ভঙ্গুর। স্ক্রিপ্ট ফাইলের অবস্থান পরিবর্তন করার জন্য স্ক্রিপ্টটি পরিবর্তন করা দরকার
  • idঅ্যাট্রিবিউটটি ব্যবহার করার চেয়ে কম ব্যাপকভাবে সমর্থিত
  • আপনি একই স্ক্রিপ্টটি দু'বার লোড করলে সমস্যা দেখা দেবে

৫. আপনি চাইলে এটির জন্য সমস্ত স্ক্রিপ্টে লুপ করুন

আমরা প্রতিটি স্ক্রিপ্টের উপাদানটি লুপ করতে পারি এবং আমরা যা চাই তা চয়ন করতে প্রতিটি স্বতন্ত্রভাবে পরীক্ষা করতে পারি:

<script>
var me = null;
var scripts = document.getElementsByTagName("script")
for (var i = 0; i < scripts.length; ++i) {
    if( isMe(scripts[i])){
      me = scripts[i];
    }
}
</script>

এটি আমাদের পুরানো ব্রাউজারগুলিতে আগের উভয় কৌশল ব্যবহার করতে দেয় querySelector()যা গুণাবলীর সাথে ভাল সমর্থন করে না । উদাহরণ স্বরূপ:

function isMe(scriptElem){
    return scriptElem.getAttribute('src') === "//example.com/embed.js";
}

এটি যেভাবেই গ্রহণ করা হোক না কেন তার সুবিধাগুলি এবং সমস্যাগুলির উত্তরাধিকারী হয় তবে querySelector()পুরানো ব্রাউজারগুলিতে এটি নির্ভর করে না ।

The. শেষ সম্পাদিত স্ক্রিপ্টটি পান

যেহেতু স্ক্রিপ্টগুলি ধারাবাহিকভাবে কার্যকর করা হয়, তাই শেষ স্ক্রিপ্ট উপাদানটি প্রায়শই বর্তমান চলমান স্ক্রিপ্ট হবে:

<script>
var scripts = document.getElementsByTagName( 'script' );
var me = scripts[ scripts.length - 1 ];
</script>

উপকারিতা

  • সহজ।
  • প্রায় সর্বজনীন সমর্থিত
  • কোনও কাস্টম বৈশিষ্ট্য বা আইডি দরকার নেই

সমস্যা

  • না না অ্যাসিঙ্ক্রোনাস স্ক্রিপ্টের কাজ ( defer& async)
  • না না পরিবর্তনশীল ঢোকানো স্ক্রিপ্ট সঙ্গে কাজ

4
এই উত্তর হওয়া উচিত।
রই নমির

1
@ রইনিমিরের সাথে একমত এটি সেরা উত্তর।
হ্যান্স

27
ধন্যবাদ ছেলেরা, তবে আপনি জানেন যে আমি গৃহীত উত্তরের 4 বছর পরে উত্তর দিয়েছি , ডান :)
ব্রাইস

5
"ডকুমেন্ট.কন্ট্রনস্ক্রিপ্ট" ডায়নামিক লোড স্ক্রিপ্টগুলি নিয়ে আমার পক্ষে কাজ করে না, সর্বশেষ ক্রোম / ফায়ারফক্সে
নথী দেয়

1
কাজ করে না যখন scriptএকটি হল templateএকটি শ্যাডো DOM মধ্যে ঢোকানো
Supersharp

85

যেহেতু স্ক্রিপ্টগুলি ক্রমানুসারে কার্যকর করা হয়, বর্তমানে সম্পাদিত স্ক্রিপ্ট ট্যাগটি ততক্ষণ পর্যন্ত পৃষ্ঠায় সর্বদা শেষ স্ক্রিপ্ট ট্যাগ। সুতরাং, স্ক্রিপ্ট ট্যাগ পেতে, আপনি এটি করতে পারেন:

var scripts = document.getElementsByTagName( 'script' );
var thisScriptTag = scripts[ scripts.length - 1 ];

3
এটি সহজ এবং মার্জিত। নতুন গুগল চার্টস / ভিজ্যুয়ালাইজেশন এপিআই-এ এর উদাহরণ রয়েছে, যদি আপনি জাভাস্ক্রিপ্টটি আনপ্যাক করেন। তারা স্ক্রিপ্ট ট্যাগের মধ্যে থেকে JSON ডেটা লোড করে, দেখুন: ajax.googleapis.com/ajax/static/modules/gviz/1.0/chart.js
জেসন থ্রেশার

1
এটি দুর্দান্ত ধারণা এবং এটি সাধারণত আমার পক্ষে কাজ করে। তবে আমার যুক্ত করা উচিত যে এমন সময়গুলি যখন আমি খুঁজে পেয়েছি এটি অন্য কোনও স্ক্রিপ্টের রেফারেন্স ফিরিয়ে দেয়। নিশ্চিত কেন নয় - এটি নিচে ট্র্যাক করতে সক্ষম হয় নি। ফলস্বরূপ, আমি সাধারণত একটি ভিন্ন পদ্ধতি নিয়ে যাই, যেমন, আমি স্ক্রিপ্ট ফাইলটির নাম হার্ড-কোড করি এবং সেই ফাইলটির নামের সাথে স্ক্রিপ্ট ট্যাগটি সন্ধান করি।
কেন স্মিথ

53
একটি উদাহরণ যা আমি ভেবে দেখতে পারি যেখানে এটি কোনও ভুল ফলাফল ফিরে আসতে পারে যখন একটি স্ক্রিপ্ট ট্যাগটি ডিওএম-এ সংযোজনীয়ভাবে যুক্ত করা হয়।
কফি কামড়

9
হ্যাঁ এর অপ্রত্যাশিত ফলাফল থাকতে পারে যাতে আপনি পরিবর্তে কোনও নির্বাচক ব্যবহার করার চেষ্টা করতে পারেন: $ ('স্ক্রিপ্ট [src * = "/ mysource.js"]') ???
জেসন সেব্রিং

7
পৃষ্ঠা লোড হওয়ার পরে আপনার স্ক্রিপ্টগুলি লোড হয়ে গেলে এটি কাজ করে না। আপনি সম্ভবত সঠিক ট্যাগ পাবেন না।
থিমজেড

11

সম্ভবত সবচেয়ে সহজ কাজটি হ'ল আপনার স্ক্রিপ্ট ট্যাগকে একটি idবৈশিষ্ট্য দেওয়া।


2
যদিও আপনি ঠিক বলেছেন, এমন অনেকগুলি ক্ষেত্রে রয়েছে যে ক্ষেত্রে ওপি-র প্রশ্নটি বৈধ, একটি দম্পতি হবেন: 1) আপনি যখন ক্রল করছেন 2) আপনি যখন কোনও ক্লায়েন্টের ডিওএমের সাথে কাজ করছেন, এবং তিনি পরিবর্তন করতে রাজি নন
নিকোচর

10

স্ক্রিপ্টটি কেবল তখনই ক্রমিকভাবে কার্যকর করা হয় যদি তাদের মধ্যে "ডিফার" বা একটি "অ্যাসিঙ্ক" বৈশিষ্ট্য না থাকে। স্ক্রিপ্ট ট্যাগের সম্ভাব্য আইডি / এসআরসি / টিআইআরএল বৈশিষ্ট্যগুলির একটি জেনেও সেই ক্ষেত্রে কাজ করতে পারে। সুতরাং গ্রেগ এবং জাস্টিন উভয়ের পরামর্শই সঠিক।

document.currentScriptWHATWG তালিকাগুলির জন্য ইতিমধ্যে একটি প্রস্তাব রয়েছে ।

সম্পাদনা করুন : ফায়ারফক্স> 4 ইতিমধ্যে এটি অত্যন্ত দরকারী সম্পত্তিটি প্রয়োগ করে তবে এটি আমি শেষবারের মতো চেক করা আইই 11 এ পাওয়া যায় না এবং কেবলমাত্র ক্রোম 29 এবং সাফারি 8 তে উপলব্ধ।

সম্পাদনা : কেউ "ডকুমেন্ট.সক্রিপ্টস" সংগ্রহের উল্লেখ করেনি তবে আমি বিশ্বাস করি যে বর্তমানে চলমান স্ক্রিপ্টটি পাওয়ার জন্য নিম্নলিখিতটি একটি ভাল ক্রস ব্রাউজার বিকল্প হতে পারে:

var me = document.scripts[document.scripts.length -1];

1
এটি ডকুমেন্টস.সক্রিপ্টগুলি ডকুমেন্টস
মরিটজ

9

এখানে পলিফিলের কিছুটা অংশ document.CurrentScriptরয়েছে যা যদি বিদ্যমান থাকে এবং আইডি দ্বারা স্ক্রিপ্টটি সন্ধান করতে ফিরে আসে তবে তার উপকার হয়।

<script id="uniqueScriptId">
    (function () {
        var thisScript = document.CurrentScript || document.getElementByID('uniqueScriptId');

        // your code referencing thisScript here
    ());
</script>

যদি আপনি এটি প্রতিটি স্ক্রিপ্ট ট্যাগের শীর্ষে অন্তর্ভুক্ত করেন তবে আমি বিশ্বাস করি যে আপনি কোন স্ক্রিপ্ট ট্যাগটি নিক্ষেপ করা হচ্ছে তা ধারাবাহিকভাবে জানতে সক্ষম হবেন এবং আপনি অ্যাসিঙ্ক্রোনাস কলব্যাকের প্রসঙ্গে স্ক্রিপ্ট ট্যাগটিও উল্লেখ করতে সক্ষম হবেন।

অনির্ধারিত, সুতরাং যদি আপনি এটি চেষ্টা করেন তবে অন্যদের জন্য প্রতিক্রিয়া রাখুন।


idঅ্যাট্রিবিউট অবৈধ একটি scriptযদিও উপাদান। এই পদ্ধতির কি ধরণের সমস্যা তৈরি হতে পারে?
NR

1
@ এনআর - না, সমস্ত উপাদানগুলির একটি idবৈশিষ্ট্য থাকতে পারে। id, classএবং slotডিওএম স্তরে সংজ্ঞায়িত করা হয়, এইচটিএমএল স্তর নয়। আপনি যদি এইচটিএমএল-তে গ্লোবাল বৈশিষ্ট্যগুলিতে যান এবং তালিকার পাশ দিয়ে স্ক্রোল করেন তবে আপনি খুঁজে পাবেন "ডোম স্ট্যান্ডার্ডটি কোনও নামস্থানের কোনও উপাদানের জন্য শ্রেণি, আইডি এবং স্লট বৈশিষ্ট্যের জন্য ব্যবহারকারী এজেন্ট প্রয়োজনীয়তাগুলি সংজ্ঞায়িত করে।" এরপরে "ক্লাস, আইডি এবং স্লট বৈশিষ্ট্যগুলি সমস্ত HTML উপাদানগুলিতে নির্দিষ্ট করা যেতে পারে।" ডোম স্পেকটি এখানে এটি কভার করে ।
টিজে ক্রাউডার

6

এটি অবশ্যই পৃষ্ঠা লোডে কাজ করে এবং যখন স্ক্রিপ্ট ট্যাগটি জাভাস্ক্রিপ্টের সাথে যুক্ত করা হয় (উদাহরণস্বরূপ, এজ্যাক্স সহ)

<script id="currentScript">
var $this = document.getElementById("currentScript");
$this.setAttribute("id","");
//...
</script>

3

বর্তমান নির্বাহী স্ক্রিপ্ট ব্লকের রেফারেন্স পেতে এই সাধারণ পদক্ষেপগুলি অনুসরণ করুন:

  1. স্ক্রিপ্ট ব্লকের মধ্যে কিছু এলোমেলো অনন্য স্ট্রিং রাখুন (প্রতিটি স্ক্রিপ্ট ব্লকে অবশ্যই স্বতন্ত্র / আলাদা হতে হবে)
  2. ডকুমেন্ট.এলিটমেন্টস বাইট্যাগনাম ('স্ক্রিপ্ট') এর আইট্রেট ফলাফল, তাদের প্রতিটি সামগ্রীর থেকে অনন্য স্ট্রিং (ইনারটেক্সট / টেক্সট কনটেন্ট সম্পত্তি থেকে প্রাপ্ত) খুঁজছেন।

উদাহরণ (ABCDE345678 অনন্য আইডি) :

<script type="text/javascript">
var A=document.getElementsByTagName('script'),i=count(A),thi$;
for(;i;thi$=A[--i])
  if((thi$.innerText||thi$.textContent).indexOf('ABCDE345678'))break;
// Now thi$ is refer to current script block
</script>

বিটিডব্লিউ, আপনার ক্ষেত্রে, আপনি অন্য স্ক্রিপ্ট অন্তর্ভুক্ত করতে কেবল পুরানো ফ্যাশন ডকুমেন্ট.রাইট () পদ্ধতিটি ব্যবহার করতে পারেন। যেমন আপনি উল্লেখ করেছেন যে ডিওএম এখনও রেন্ডার হয়নি, আপনি ব্রাউজার সর্বদা রৈখিক ক্রমে স্ক্রিপ্ট সম্পাদন করে (পিছনে যে বিলম্বিত হবে তা পিছিয়ে দেওয়া হবে) থেকে আপনি সুবিধা নিতে পারেন, তাই আপনার বাকী নথির এখনও "উপস্থিত নেই"। আপনি ডকুমেন্ট.ওরাইট () এর মাধ্যমে যা কিছু লিখবেন তা কলার স্ক্রিপ্টের ঠিক পরে স্থাপন করা হবে।

মূল HTML পৃষ্ঠার উদাহরণ :

<!doctype html>
<html><head>
<script src="script.js"></script>
<script src="otherscript.js"></script>
<body>anything</body></html>

স্ক্রিপ্ট.জেএস এর সামগ্রী :

document.write('<script src="inserted.js"></script>');

রেন্ডার করার পরে, ডিওএম কাঠামোটি হয়ে উঠবে:

HEAD
  SCRIPT script.js
  SCRIPT inserted.js
  SCRIPT otherscript.js
BODY

এটি কেবল বাহ্যিক স্ক্রিপ্টগুলির জন্য নয়, কেবল ইনলাইন স্ক্রিপ্টগুলির জন্যই কাজ করে বলে মনে হচ্ছে। পরবর্তী ক্ষেত্রে সমস্ত বৈশিষ্ট্য ইনারটেক্সট, পাঠ্য এবং পাঠ্য সামগ্রী খালি রয়েছে।
হোস ডি জং

3

অ্যাসিঙ্ক এবং মুলতুবি স্ক্রিপ্টগুলি নিয়ে কাজ করার জন্য একটি পন্থা হ'ল ওল্ড হ্যান্ডলারটি সমস্ত স্ক্রিপ্ট ট্যাগের জন্য একটি অ্যান্ডলোড হ্যান্ডলার সেট করে এবং প্রথমটি কার্যকর হয় যা আপনার হওয়া উচিত।

function getCurrentScript(callback) {
  if (document.currentScript) {
    callback(document.currentScript);
    return;
  }
  var scripts = document.scripts;
  function onLoad() {
    for (var i = 0; i < scripts.length; ++i) {
      scripts[i].removeEventListener('load', onLoad, false);
    }
    callback(event.target);
  }
  for (var i = 0; i < scripts.length; ++i) {
    scripts[i].addEventListener('load', onLoad, false);
  }
}

getCurrentScript(function(currentScript) {
  window.console.log(currentScript.src);
});

3

স্ক্রিপ্টটি পেতে, এটি বর্তমানে আপনি ব্যবহার করতে পারেন স্ক্রিপ্টটি লোড করেছে

var thisScript = document.currentScript;

আপনার স্ক্রিপ্টের শুরুতে আপনার একটি রেফারেন্স রাখা দরকার, যাতে আপনি পরে কল করতে পারেন

var url = thisScript.src

2

এই অ্যালগরিদম বিবেচনা করুন। যখন আপনার স্ক্রিপ্টটি লোড হয় (যদি একাধিক অভিন্ন স্ক্রিপ্ট থাকে) তখন ডকুমেন্ট.সক্রিপ্টগুলি দেখুন, সঠিক "src" বৈশিষ্ট্য সহ প্রথম স্ক্রিপ্টটি সন্ধান করুন এবং এটি সংরক্ষণ করুন এবং ডেটা-অ্যাট্রিবিউট বা অনন্য শ্রেণিকামের সাহায্যে এটি 'ভিজিট' হিসাবে চিহ্নিত করুন।

পরবর্তী স্ক্রিপ্টটি লোড হয়ে গেলে, দর্শনীয় হিসাবে চিহ্নিত চিহ্নিত কোনও স্ক্রিপ্ট পেরিয়ে আবার ডকুমেন্ট.সক্রিপ্টগুলির মাধ্যমে স্ক্যান করুন। Script স্ক্রিপ্টটির প্রথম অপ্রত্যাশিত উদাহরণটি ধরুন।

এটি ধরে নিয়েছে যে অভিন্ন স্ক্রিপ্টগুলি সম্ভবত লোড হওয়া ক্রমে কার্যকর হতে পারে, মাথা থেকে দেহ পর্যন্ত, উপরে থেকে নীচে, সিঙ্ক্রোনাস থেকে অ্যাসিক্রোনাস পর্যন্ত।

(function () {
  var scripts = document.scripts;

  // Scan for this data-* attribute
  var dataAttr = 'data-your-attribute-here';

  var i = 0;
  var script;
  while (i < scripts.length) {
    script = scripts[i];
    if (/your_script_here\.js/i.test(script.src)
        && !script.hasAttribute(dataAttr)) {

        // A good match will break the loop before
        // script is set to null.
        break;
    }

    // If we exit the loop through a while condition failure,
    // a check for null will reveal there are no matches.
    script = null;
    ++i;
  }

  /**
   * This specific your_script_here.js script tag.
   * @type {Element|Node}
   */
  var yourScriptVariable = null;

  // Mark the script an pass it on.
  if (script) {
    script.setAttribute(dataAttr, '');
    yourScriptVariable = script;
  }
})();

এটি প্রথম মিলের স্ক্রিপ্টের জন্য সমস্ত স্ক্রিপ্টের মাধ্যমে স্ক্যান করবে যা বিশেষ বৈশিষ্ট্যের সাথে চিহ্নিত নয়।

তারপরে সেই নোডটিকে চিহ্নিত করুন, যদি পাওয়া যায়, কোনও ডেটা-অ্যাট্রিবিউট দিয়ে যাতে পরবর্তী স্ক্যানগুলি এটি চয়ন করে না। এটি গ্রাফ ট্র্যাভার্সাল বিএফএস এবং ডিএফএস অ্যালগরিদমের অনুরূপ যেখানে পুনর্বিবেচনা রোধ করতে নোডগুলি 'ভিজিট' হিসাবে চিহ্নিত করা যেতে পারে।


স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম। আপনি কি অ্যালগরিদমের সাথে কিছু কোড অন্তর্ভুক্ত করার যত্ন নেবেন?
গ্যারি 99

থার আপনি যান, @ গ্যারি 99
এলএসওজে

0

আমি এটি পেয়েছি, যা এফএফ 3, আই 6 এবং 7 এ কাজ করছে page অন-চাহিদা লোড হওয়া স্ক্রিপ্টগুলিতে পৃষ্ঠা লোড সম্পূর্ণ না হওয়া পর্যন্ত উপলব্ধ নয় তবে এটি এখনও খুব দরকারী।

//handle on-demand loading of javascripts
makescript = function(url){
    var v = document.createElement('script');
    v.src=url;
    v.type='text/javascript';

    //insertAfter. Get last <script> tag in DOM
    d=document.getElementsByTagName('script')[(document.getElementsByTagName('script').length-1)];
    d.parentNode.insertBefore( v, d.nextSibling );
}

0

আপনি যদি স্ক্রিপ্টের ফাইলের নামটি ধরে নিতে পারেন তবে এটি সন্ধান করতে পারেন। আমি এখন পর্যন্ত ফায়ারফক্সে কেবলমাত্র নিম্নলিখিত ফাংশনটি পরীক্ষা করেছি।

  function findMe(tag, attr, file) {
    var tags = document.getElementsByTagName(tag);
    var r = new RegExp(file + '$');
    for (var i = 0;i < tags.length;i++) {
      if (r.exec(tags[i][attr])) {
        return tags[i][attr];
      }
    }
  };
  var element = findMe('script', 'src', 'scripts.js');

1
খুব পুরানো। এটি ক্যোরিসারেক্টর দিয়ে করা যেতে পারে, সাধারণ অনলাইনার!
ফ্যাবিয়ান ভন এলার্টস

-1

আমি নীচের কোডটি সর্বাধিক সামঞ্জস্যপূর্ণ, পারফরম্যান্স এবং সহজ হিসাবে পেয়েছি।

var scripts = document.getElementsByTagName('script');
var thisScript = null;
var i = scripts.length;
while (i--) {
  if (scripts[i].src && (scripts[i].src.indexOf('yourscript.js') !== -1)) {
    thisScript = scripts[i];
    break;
  }
}
console.log(thisScript);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.