ब्यौरा
User Scripts कॉन्टेक्स्ट में उपयोगकर्ता स्क्रिप्ट लागू करने के लिए, userScripts
एपीआई का इस्तेमाल करें.
अनुमतियां
userScripts
chrome.userScripts
एपीआई का इस्तेमाल करने के लिए, अपनी Manifest.json और "host_permissions"
में "userScripts"
अनुमति जोड़ें. ऐसा उन साइटों के लिए करें जिन पर आपको स्क्रिप्ट चलाने हैं.
{
"name": "User script test extension",
"manifest_version": 3,
"minimum_chrome_version": "120",
"permissions": [
"userScripts"
],
"host_permissions": [
"*://example.com/*"
]
}
उपलब्धता
सिद्धांत और उनका इस्तेमाल
यूज़र स्क्रिप्ट, एक ऐसा कोड होता है जिसे वेब पेज में डाला जाता है. इससे, उसके दिखने या काम करने के तरीके में बदलाव होता है. स्क्रिप्ट, उपयोगकर्ताओं ने बनाई हैं या उन्हें स्क्रिप्ट डेटा स्टोर करने की जगह या उपयोगकर्ता स्क्रिप्ट एक्सटेंशन से डाउनलोड किया गया है.
एक्सटेंशन के उपयोगकर्ताओं के लिए डेवलपर मोड
एक्सटेंशन डेवलपर के रूप में, आपके Chrome के इंस्टॉलेशन में डेवलपर मोड पहले से ही सक्षम होता है. उपयोगकर्ता स्क्रिप्ट एक्सटेंशन के लिए, आपके उपयोगकर्ताओं को डेवलपर मोड भी चालू करना होगा. यहां कुछ निर्देश दिए गए हैं जिन्हें कॉपी करके अपने दस्तावेज़ में चिपकाया जा सकता है.
- नए टैब में
chrome://extensions
डालकर, एक्सटेंशन पेज पर जाएं. (डिज़ाइन के हिसाब से,chrome://
यूआरएल लिंक नहीं किए जा सकते.) डेवलपर मोड के आगे मौजूद टॉगल स्विच पर क्लिक करके, डेवलपर मोड चालू करें.
डेवलपर मोड चालू है या नहीं, यह देखने के लिए chrome.userScripts
गड़बड़ी की सूचना दे सकता है. उदाहरण के लिए:
function isUserScriptsAvailable() {
try {
// Property access which throws if developer mode is not enabled.
chrome.userScripts;
return true;
} catch {
// Not available.
return false;
}
}
एकांत में काम करें
उपयोगकर्ता और कॉन्टेंट स्क्रिप्ट, दोनों किसी एक जगह पर या मुख्य दुनिया में चल सकती हैं. आइसोलेटेड वर्ल्ड, प्रोग्राम चलाने का वह एनवायरमेंट होता है जिसे कोई होस्ट पेज या अन्य एक्सटेंशन ऐक्सेस नहीं कर सकते. इससे उपयोगकर्ता स्क्रिप्ट, होस्ट पेज या अन्य एक्सटेंशन को प्रभावित किए बिना अपने JavaScript एनवायरमेंट को बदल सकता है उपयोगकर्ता और कॉन्टेंट स्क्रिप्ट. इसके उलट, उपयोगकर्ता स्क्रिप्ट और कॉन्टेंट स्क्रिप्ट, होस्ट पेज या अन्य एक्सटेंशन के उपयोगकर्ता और कॉन्टेंट स्क्रिप्ट को नहीं दिखती हैं. मुख्य दुनिया में चल रही स्क्रिप्ट, पेजों और अन्य एक्सटेंशन को होस्ट कर सकती हैं. साथ ही, ये होस्ट पेजों और अन्य एक्सटेंशन पर भी दिखती हैं. दुनिया चुनने के लिए, userScripts.register()
पर कॉल करते समय "USER_SCRIPT"
या "MAIN"
को पास करें.
USER_SCRIPT
वर्ल्ड के लिए कॉन्टेंट की सुरक्षा के बारे में नीति कॉन्फ़िगर करने के लिए, userScripts.configureWorld()
पर कॉल करें:
chrome.userScripts.configureWorld({
csp: "script-src 'self'"
});
मैसेज सेवा
कॉन्टेंट स्क्रिप्ट और ऑफ़स्क्रीन दस्तावेज़ों की तरह, यूज़र स्क्रिप्ट भी मैसेज सेवा का इस्तेमाल करके, एक्सटेंशन के अन्य हिस्सों के साथ कम्यूनिकेशन करती हैं. इसका मतलब है कि वे runtime.sendMessage()
और runtime.connect()
को एक्सटेंशन के किसी भी अन्य हिस्से की तरह कॉल कर सकती हैं. हालांकि, इवेंट हैंडलर को खास तौर पर बनाए गए इवेंट हैंडलर के ज़रिए भेजा जाता है. इसका मतलब है कि ये onMessage
या onConnect
का इस्तेमाल नहीं करते. इन हैंडलर को runtime.onUserScriptMessage
और runtime.onUserScriptConnect
कहा जाता है. खास हैंडलर की मदद से उपयोगकर्ता स्क्रिप्ट से आने वाले मैसेज की पहचान आसानी से की जा सकती है, क्योंकि इन पर कम भरोसा किया जाता है.
कोई मैसेज भेजने से पहले, आपको configureWorld()
को कॉल करना होगा. साथ ही, messaging
आर्ग्युमेंट को true
पर सेट करना होगा. ध्यान दें कि csp
और messaging
, दोनों आर्ग्युमेंट एक ही समय पर पास किए जा सकते हैं.
chrome.userScripts.configureWorld({
messaging: true
});
एक्सटेंशन से जुड़े अपडेट
एक्सटेंशन के अपडेट होने पर, उपयोगकर्ता स्क्रिप्ट मिटा दी जाती हैं. एक्सटेंशन सर्विस वर्कर में, runtime.onInstalled
इवेंट हैंडलर में कोड चलाकर उसे वापस जोड़ा जा सकता है. सिर्फ़ इवेंट कॉलबैक में दी गई "update"
वजह के हिसाब से जवाब दें.
उदाहरण
यह उदाहरण हमारे सैंपल रिपॉज़िटरी में userScript सैंपल से लिया गया है.
स्क्रिप्ट रजिस्टर करें
नीचे दिए गए उदाहरण में, register()
को किए गए बेसिक कॉल के बारे में बताया गया है. पहला आर्ग्युमेंट, उन ऑब्जेक्ट का कलेक्शन है जो रजिस्टर की जाने वाली स्क्रिप्ट के बारे में जानकारी देते हैं. यहां दिखाए गए विकल्पों से ज़्यादा विकल्प मौजूद हैं.
chrome.userScripts.register([{
id: 'test',
matches: ['*://*/*'],
js: [{code: 'alert("Hi!")'}]
}]);
टाइप
ExecutionWorld
उपयोगकर्ता स्क्रिप्ट के काम करने के लिए JavaScript की दुनिया.
Enum
"MAIN"
DOM के एक्ज़ीक्यूशन एनवायरमेंट के बारे में बताता है. यह होस्ट पेज के JavaScript के साथ शेयर किया जाने वाला एक्ज़ीक्यूशन एनवायरमेंट होता है.
"USER_स्क्रिप्ट"
एक्ज़िक्यूशन एनवायरमेंट के बारे में बताता है, जो खास तौर पर उपयोगकर्ता स्क्रिप्ट के लिए होता है और जिसे पेज के सीएसपी से छूट दी गई है.
RegisteredUserScript
प्रॉपर्टी
-
allFrames
बूलियन ज़रूरी नहीं
अगर सही है, तो यह सभी फ़्रेम में इंजेक्ट करेगा, भले ही फ़्रेम टैब में सबसे ऊपर वाला फ़्रेम न हो. यूआरएल से जुड़ी ज़रूरी शर्तों का पता लगाने के लिए, हर फ़्रेम की अलग से जांच की जाती है; अगर यूआरएल की शर्तें पूरी नहीं होती हैं, तो यह चाइल्ड फ़्रेम में इंजेक्ट नहीं करेगा. डिफ़ॉल्ट तौर पर 'गलत' पर सेट होती है. इसका मतलब है कि सिर्फ़ सबसे ऊपर का फ़्रेम मैच करता है.
-
excludeGlobs
स्ट्रिंग[] ज़रूरी नहीं
इससे उन पेजों के लिए वाइल्डकार्ड पैटर्न तय होते हैं जिनमें यह उपयोगकर्ता स्क्रिप्ट शामिल नहीं की जाएगी.
-
excludeMatches
स्ट्रिंग[] ज़रूरी नहीं
इसमें वे पेज शामिल नहीं हैं जिनमें इस यूज़र स्क्रिप्ट को डाला जाएगा. इन स्ट्रिंग के सिंटैक्स की ज़्यादा जानकारी के लिए, मैच पैटर्न देखें.
-
आईडी
स्ट्रिंग
एपीआई कॉल में बताई गई उपयोगकर्ता स्क्रिप्ट का आईडी. यह प्रॉपर्टी '_' से शुरू नहीं होनी चाहिए क्योंकि इसे जनरेट किए गए स्क्रिप्ट आईडी के प्रीफ़िक्स के तौर पर रिज़र्व किया जाता है.
-
includeGlobs
स्ट्रिंग[] ज़रूरी नहीं
इस नीति से, उन पेजों के वाइल्डकार्ड पैटर्न तय होते हैं जिनमें यह उपयोगकर्ता स्क्रिप्ट शामिल की जाएगी.
-
जेएस
ScriptSource ऑब्जेक्ट की सूची, जो मिलान करने वाले पेजों में इंजेक्ट की जाने वाली स्क्रिप्ट के सोर्स तय करती है.
-
मैच
स्ट्रिंग[] ज़रूरी नहीं
इससे पता चलता है कि इस यूज़र स्क्रिप्ट को किन पेजों में इंजेक्ट किया जाएगा. इन स्ट्रिंग के सिंटैक्स की ज़्यादा जानकारी के लिए, मैच पैटर्न देखें. ${ref:register} के लिए इस प्रॉपर्टी के बारे में बताना ज़रूरी है.
-
runAt
RunAt ज़रूरी नहीं है
इस नीति से पता चलता है कि JavaScript फ़ाइलों को वेब पेज में कब डाला जाता है. पसंदीदा और डिफ़ॉल्ट वैल्यू
document_idle
है. -
दुनिया
ExecutionWorld ज़रूरी नहीं है
वह JavaScript एक्ज़ीक्यूशन एनवायरमेंट जिसमें स्क्रिप्ट को चलाना है. डिफ़ॉल्ट वैल्यू
`USER_SCRIPT`
है.
ScriptSource
प्रॉपर्टी
-
कोड
स्ट्रिंग ज़रूरी नहीं
इस स्ट्रिंग में इंजेक्ट करने के लिए JavaScript कोड होता है.
file
याcode
में से कोई एक बताना ज़रूरी है. -
फ़ाइल
स्ट्रिंग ज़रूरी नहीं
एक्सटेंशन की रूट डायरेक्ट्री के हिसाब से इंजेक्ट करने वाली JavaScript फ़ाइल का पाथ.
file
याcode
में से कोई एक बताना ज़रूरी है.
UserScriptFilter
प्रॉपर्टी
-
आईडी
स्ट्रिंग[] ज़रूरी नहीं
getScripts
सिर्फ़ इस सूची में दिए गए आईडी वाली स्क्रिप्ट दिखाता है.
WorldProperties
प्रॉपर्टी
-
सीएसपी
स्ट्रिंग ज़रूरी नहीं
वर्ल्ड csp तय करता है.
`ISOLATED`
वर्ल्ड सीएसपी डिफ़ॉल्ट है. -
मैसेज सेवा
बूलियन ज़रूरी नहीं
इस नीति से पता चलता है कि मैसेजिंग एपीआई को सार्वजनिक किया गया है या नहीं. डिफ़ॉल्ट वैल्यू
false
है.
तरीके
configureWorld()
chrome.userScripts.configureWorld(
properties: WorldProperties,
callback?: function,
)
यह नीति, `USER_SCRIPT`
लागू करने के एनवायरमेंट को कॉन्फ़िगर करती है.
पैरामीटर
-
प्रॉपर्टी
इसमें यूज़र स्क्रिप्ट वर्ल्ड कॉन्फ़िगरेशन शामिल है.
-
कॉलबैक
फ़ंक्शन वैकल्पिक
callback
पैरामीटर ऐसा दिखता है:() => void
रिटर्न
-
प्रॉमिस<void>
मेनिफ़ेस्ट V3 और उसके बाद के वर्शन में प्रॉमिस काम करते हैं. हालांकि, कॉलबैक की सुविधा इन मामलों में दी जाती है पुराने सिस्टम के साथ काम करने की सुविधा. एक ही फ़ंक्शन कॉल में दोनों का इस्तेमाल नहीं किया जा सकता. कॉन्टेंट बनाने प्रॉमिस उसी टाइप के साथ ठीक होता है जिसे कॉलबैक में पास किया जाता है.
getScripts()
chrome.userScripts.getScripts(
filter?: UserScriptFilter,
callback?: function,
)
इस एक्सटेंशन के लिए, डाइनैमिक तौर पर रजिस्टर की गई सभी उपयोगकर्ता स्क्रिप्ट दिखाता है.
पैरामीटर
-
फ़िल्टर करें
UserScriptFilter ज़रूरी नहीं
अगर तय किया गया है, तो यह तरीका सिर्फ़ उससे मेल खाने वाली उपयोगकर्ता स्क्रिप्ट दिखाता है.
-
कॉलबैक
फ़ंक्शन वैकल्पिक
callback
पैरामीटर ऐसा दिखता है:(scripts: RegisteredUserScript[]) => void
-
स्क्रिप्ट
-
रिटर्न
-
Promise<RegisteredUserScript[]>
मेनिफ़ेस्ट V3 और उसके बाद के वर्शन में प्रॉमिस काम करते हैं. हालांकि, कॉलबैक की सुविधा इन मामलों में दी जाती है पुराने सिस्टम के साथ काम करने की सुविधा. एक ही फ़ंक्शन कॉल में दोनों का इस्तेमाल नहीं किया जा सकता. कॉन्टेंट बनाने प्रॉमिस उसी टाइप के साथ ठीक होता है जिसे कॉलबैक में पास किया जाता है.
register()
chrome.userScripts.register(
scripts: RegisteredUserScript[],
callback?: function,
)
इस एक्सटेंशन के लिए एक या उससे ज़्यादा उपयोगकर्ता स्क्रिप्ट रजिस्टर करता है.
पैरामीटर
-
स्क्रिप्ट
इसमें, रजिस्टर की जाने वाली उपयोगकर्ता स्क्रिप्ट की सूची शामिल होती है.
-
कॉलबैक
फ़ंक्शन वैकल्पिक
callback
पैरामीटर ऐसा दिखता है:() => void
रिटर्न
-
प्रॉमिस<void>
मेनिफ़ेस्ट V3 और उसके बाद के वर्शन में प्रॉमिस काम करते हैं. हालांकि, कॉलबैक की सुविधा इन मामलों में दी जाती है पुराने सिस्टम के साथ काम करने की सुविधा. एक ही फ़ंक्शन कॉल में दोनों का इस्तेमाल नहीं किया जा सकता. कॉन्टेंट बनाने प्रॉमिस उसी टाइप के साथ ठीक होता है जिसे कॉलबैक में पास किया जाता है.
unregister()
chrome.userScripts.unregister(
filter?: UserScriptFilter,
callback?: function,
)
इस एक्सटेंशन के लिए डाइनैमिक तौर पर रजिस्टर की गई सभी उपयोगकर्ता स्क्रिप्ट का रजिस्ट्रेशन रद्द करता है.
पैरामीटर
-
फ़िल्टर करें
UserScriptFilter ज़रूरी नहीं
अगर तय किया जाता है, तो यह तरीका सिर्फ़ उससे मेल खाने वाली उपयोगकर्ता स्क्रिप्ट का रजिस्ट्रेशन रद्द करता है.
-
कॉलबैक
फ़ंक्शन वैकल्पिक
callback
पैरामीटर ऐसा दिखता है:() => void
रिटर्न
-
प्रॉमिस<void>
मेनिफ़ेस्ट V3 और उसके बाद के वर्शन में प्रॉमिस काम करते हैं. हालांकि, कॉलबैक की सुविधा इन मामलों में दी जाती है पुराने सिस्टम के साथ काम करने की सुविधा. एक ही फ़ंक्शन कॉल में दोनों का इस्तेमाल नहीं किया जा सकता. कॉन्टेंट बनाने प्रॉमिस उसी टाइप के साथ ठीक होता है जिसे कॉलबैक में पास किया जाता है.
update()
chrome.userScripts.update(
scripts: RegisteredUserScript[],
callback?: function,
)
इस एक्सटेंशन के लिए एक या ज़्यादा उपयोगकर्ता स्क्रिप्ट को अपडेट करता है.
पैरामीटर
-
स्क्रिप्ट
इसमें अपडेट की जाने वाली उपयोगकर्ता स्क्रिप्ट की सूची शामिल होती है. मौजूदा स्क्रिप्ट के लिए कोई प्रॉपर्टी सिर्फ़ तब अपडेट की जाती है, जब इस ऑब्जेक्ट में उसकी जानकारी दी गई हो. अगर स्क्रिप्ट पार्स करने/फ़ाइल की पुष्टि करने के दौरान गड़बड़ियां होती हैं या अगर दिए गए आईडी पूरी तरह से रजिस्टर की गई स्क्रिप्ट से मेल नहीं खाते हैं, तो कोई भी स्क्रिप्ट अपडेट नहीं की जाती है.
-
कॉलबैक
फ़ंक्शन वैकल्पिक
callback
पैरामीटर ऐसा दिखता है:() => void
रिटर्न
-
प्रॉमिस<void>
मेनिफ़ेस्ट V3 और उसके बाद के वर्शन में प्रॉमिस काम करते हैं. हालांकि, कॉलबैक की सुविधा इन मामलों में दी जाती है पुराने सिस्टम के साथ काम करने की सुविधा. एक ही फ़ंक्शन कॉल में दोनों का इस्तेमाल नहीं किया जा सकता. कॉन्टेंट बनाने प्रॉमिस उसी टाइप के साथ ठीक होता है जिसे कॉलबैक में पास किया जाता है.