क्या Google Chrome ब्राउज़र में एक बाहरी स्क्रिप्ट फ़ाइल को शामिल करने का एक सरल (मूल शायद?) तरीका है?
वर्तमान में मैं इसे इस तरह कर रहा हूं:
document.head.innerHTML += '<script src="http://example.com/file.js"></script>';
क्या Google Chrome ब्राउज़र में एक बाहरी स्क्रिप्ट फ़ाइल को शामिल करने का एक सरल (मूल शायद?) तरीका है?
वर्तमान में मैं इसे इस तरह कर रहा हूं:
document.head.innerHTML += '<script src="http://example.com/file.js"></script>';
जवाबों:
appendChild()
अधिक मूल तरीका है:
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'script.js';
document.head.appendChild(script);
TypeError: Property 'appendChild' of object #<HTMLHeadElement> is not a function
javascript_code
प्रत्यक्ष जावास्क्रिप्ट कोड इंजेक्षन करने के लिए </ code>
क्या आप कुछ AJAX फ्रेमवर्क का उपयोग करते हैं? JQuery का उपयोग करना यह होगा:
$.getScript('script.js');
यदि आप किसी फ्रेमवर्क का उपयोग नहीं कर रहे हैं, तो हरमन द्वारा उत्तर देखें।
(हो सकता है कि यह सिर्फ एक साधारण काम करने के लिए jQuery का उपयोग करने के लायक नहीं है ( या शायद यह है ) लेकिन अगर आपके पास पहले से ही लोड है तो आप इसे भी उपयोग कर सकते हैं। मैंने ऐसी वेबसाइटें देखी हैं जिनके पास jQuery लोड किया गया है जैसे बूटस्ट्रैप के साथ लेकिन फिर भी। DOM API का उपयोग सीधे ऐसे तरीके से करें जो हमेशा पोर्टेबल न हो, इसके लिए पहले से लोड किए गए jQuery का उपयोग करने के बजाय, और बहुत से लोग इस तथ्य से अवगत नहीं हैं कि getElementById()
सभी ब्राउज़रों पर लगातार काम नहीं करता है - विवरण के लिए इस उत्तर को देखें। )
मुझे इस उत्तर को लिखे हुए कई साल हो चुके हैं और मुझे लगता है कि यह यहाँ इंगित करने लायक है कि आज आप इसका उपयोग कर सकते हैं:
स्क्रिप्ट को लोड करने के लिए। इस प्रश्न को पढ़ने वाले लोगों के लिए प्रासंगिक हो सकते हैं।
यह भी देखें: ES6 मॉड्यूल के लिए व्यावहारिक कार्यप्रवाह: Fluent 2014 लड़का बेडफोर्ड द्वारा बात ।
$.getScript('script.js');
या $.getScript('../scripts/script.js');
फिर यह दस्तावेज़ के सापेक्ष है, लेकिन यह पूर्ण यूआरएल को भी लोड कर सकता है, जैसे। $.getScript('https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore.js');
आधुनिक ब्राउज़रों में आप संसाधन ( मोज़िला डॉक्स ) डाउनलोड करने के लिए भ्रूण का उपयोग कर सकते हैं और फिर इसे निष्पादित करने के लिए विकसित कर सकते हैं।
उदाहरण के लिए Angular1 डाउनलोड करने के लिए आपको टाइप करना होगा:
fetch('https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js')
.then(response => response.text())
.then(text => eval(text))
.then(() => { /* now you can use your library */ })
eval
निम्न संदेश के साथ, के उपयोग को VM1929:11 Uncaught (in promise) EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:".
क्रोम में, आपका सबसे अच्छा विकल्प डेवलपर टूल में स्रोत के तहत स्निपेट्स टैब हो सकता है।
यह आपको कोड लिखने और चलाने की अनुमति देगा, उदाहरण के लिए, लगभग पेज में: रिक्त पृष्ठ।
अधिक जानकारी यहाँ: https://developers.google.com/web/tools/chrome-devtools/debug/snippets/?hl=en
^ ^ ^ ^ के ऊपर @ maciej-bukowski के उत्तर के अनुसरण के रूप में, अब (वसंत 2017) के रूप में आधुनिक ब्राउज़रों में जो async / प्रतीक्षा का समर्थन करते हैं, आप निम्नानुसार लोड कर सकते हैं। इस उदाहरण में हम लोड करते हैं html2canvas लाइब्रेरी:
async function loadScript(url) {
let response = await fetch(url);
let script = await response.text();
eval(script);
}
let scriptUrl = 'https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js'
loadScript(scriptUrl);
यदि आप स्निपेट चलाते हैं और फिर अपने ब्राउज़र के कंसोल को खोलते हैं, तो आपको फ़ंक्शन HTML2canvas देखना चाहिए () अब परिभाषित है।
var el = document.createElement("script"),
loaded = false;
el.onload = el.onreadystatechange = function () {
if ((el.readyState && el.readyState !== "complete" && el.readyState !== "loaded") || loaded) {
return false;
}
el.onload = el.onreadystatechange = null;
loaded = true;
// done!
};
el.async = true;
el.src = path;
var hhead = document.getElementsByTagName('head')[0];
hhead.insertBefore(el, hhead.firstChild);
यदि कोई भी, लोड करने में विफल रहता है क्योंकि स्क्रिप्ट स्क्रिप्ट-src "सामग्री सुरक्षा नीति" का उल्लंघन करती है या "क्योंकि असुरक्षित- eval की अनुमति नहीं है", तो मैं अपने सुंदर-छोटे मॉड्यूल-इंजेक्टर का उपयोग डेव-टूल्स स्निपेट के रूप में करने की सलाह दूंगा , तब आप इस तरह लोड कर पाएंगे:
imports('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js')
.then(()=>alert(`today is ${moment().format('dddd')}`));
<script src="https://raw.githack.com/shmuelf/PowerJS/master/src/power-moduleInjector.js"></script>
यह समाधान काम करता है क्योंकि:
मैं इसे कंसोल में ko नॉकआउट ऑब्जेक्ट लोड करने के लिए उपयोग करता हूं
document.write("<script src='https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.0/knockout-3.5.0.debug.js'></script>");
या स्थानीय स्तर पर होस्ट
document.write("<script src='http://localhost/js/knockout-3.5.0.debug.js'></script>");
टैम्पोरमेक स्थापित करें और @match
विशिष्ट पृष्ठ url (या सभी पृष्ठों का एक मेल ) के साथ एक (या अधिक) के साथ निम्नलिखित यूजरस्क्रिप्ट जोड़ें https://*
:
// ==UserScript==
// @name inject-rx
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Inject rx library on the page
// @author Me
// @match https://www.some-website.com/*
// @require https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.4/rxjs.umd.min.js
// @grant none
// ==/UserScript==
(function() {
'use strict';
window.injectedRx = rxjs;
//Or even: window.rxjs = rxjs;
})();
जब भी आपको कंसोल पर या स्निपेट पर लाइब्रेरी की आवश्यकता होती है, तो विशिष्ट उपयोगकर्तास्क्रिप्ट और ताज़ा सक्षम करें।
यह समाधान नाम स्थान के प्रदूषण को रोकता है । आप पृष्ठ पर मौजूदा वैश्विक चर के आकस्मिक ओवरराइट से बचने के लिए कस्टम नेमस्पेस का उपयोग कर सकते हैं।