ब्यौरा
उपयोगकर्ता स्क्रिप्ट के कॉन्टेक्स्ट में उपयोगकर्ता स्क्रिप्ट को लागू करने के लिए, userScripts
एपीआई का इस्तेमाल करें.
अनुमतियां
userScripts
chrome.userScripts
एपीआई का इस्तेमाल करने के लिए, अपने manifest.json में "userScripts"
अनुमति जोड़ें. साथ ही, उन साइटों के लिए "host_permissions"
जोड़ें जिन पर आपको स्क्रिप्ट चलानी हैं.
{
"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
कहा जाता है. खास हैंडलर की मदद से, उपयोगकर्ता स्क्रिप्ट से मिले मैसेज की पहचान करना आसान हो जाता है. ये मैसेज कम भरोसेमंद होते हैं.
मैसेज भेजने से पहले, आपको messaging
आर्ग्युमेंट को true
पर सेट करके, configureWorld()
को कॉल करना होगा. ध्यान दें कि 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_SCRIPT"
यह उपयोगकर्ता स्क्रिप्ट के लिए खास तौर पर, स्क्रिप्ट को चलाने के माहौल के बारे में बताता है. साथ ही, इसे पेज के सीएसपी से छूट मिलती है.
RegisteredUserScript
प्रॉपर्टी
-
allFrames
बूलियन ज़रूरी नहीं है
अगर यह सही है, तो यह सभी फ़्रेम में इंजेक्ट हो जाएगा. भले ही, फ़्रेम टैब में सबसे ऊपर न हो. हर फ़्रेम की जांच, यूआरएल की ज़रूरी शर्तों के हिसाब से अलग से की जाती है. अगर यूआरएल की ज़रूरी शर्तें पूरी नहीं होती हैं, तो इसे चाइल्ड फ़्रेम में इंजेक्ट नहीं किया जाएगा. डिफ़ॉल्ट रूप से, यह 'गलत' पर सेट होती है. इसका मतलब है कि सिर्फ़ सबसे ऊपर वाले फ़्रेम की तुलना की जाती है.
-
excludeGlobs
string[] ज़रूरी नहीं
उन पेजों के लिए वाइल्डकार्ड पैटर्न तय करता है जिनमें इस यूज़र स्क्रिप्ट को इंजेक्ट नहीं किया जाएगा.
-
excludeMatches
string[] ज़रूरी नहीं
उन पेजों को बाहर रखता है जिनमें इस उपयोगकर्ता स्क्रिप्ट को इंजेक्ट किया जाना चाहिए. इन स्ट्रिंग के सिंटैक्स के बारे में ज़्यादा जानकारी के लिए, मैच पैटर्न देखें.
-
आईडी
स्ट्रिंग
एपीआई कॉल में बताई गई यूज़र स्क्रिप्ट का आईडी. यह प्रॉपर्टी '_' से शुरू नहीं होनी चाहिए, क्योंकि यह जनरेट किए गए स्क्रिप्ट आईडी के प्रीफ़िक्स के तौर पर रिज़र्व है.
-
includeGlobs
string[] ज़रूरी नहीं
उन पेजों के लिए वाइल्डकार्ड पैटर्न तय करता है जिनमें इस उपयोगकर्ता स्क्रिप्ट को इंजेक्ट किया जाएगा.
-
js
ScriptSource[] ज़रूरी नहीं
ScriptSource ऑब्जेक्ट की सूची, जो मैच करने वाले पेजों में इंजेक्ट की जाने वाली स्क्रिप्ट के सोर्स की जानकारी देती है. ${ref:register} के लिए, इस प्रॉपर्टी की वैल्यू देना ज़रूरी है. साथ ही, यह भी ज़रूरी है कि वैल्यू के तौर पर कोई खाली कलेक्शन न दिया गया हो.
-
मैच
string[] ज़रूरी नहीं
इससे पता चलता है कि इस उपयोगकर्ता स्क्रिप्ट को किन पेजों में इंजेक्ट किया जाएगा. इन स्ट्रिंग के सिंटैक्स के बारे में ज़्यादा जानकारी के लिए, मैच पैटर्न देखें. ${ref:register} के लिए, इस प्रॉपर्टी की वैल्यू देना ज़रूरी है.
-
runAt
RunAt ज़रूरी नहीं है
इससे पता चलता है कि वेब पेज में JavaScript फ़ाइलें कब इंजेक्ट की जाती हैं. पसंदीदा और डिफ़ॉल्ट वैल्यू
document_idle
है. -
दुनिया
ExecutionWorld ज़रूरी नहीं है
स्क्रिप्ट को चलाने के लिए, JavaScript का एक्ज़ीक्यूशन एनवायरमेंट. डिफ़ॉल्ट रूप से, यह
`USER_SCRIPT`
पर सेट होता है. -
worldId
स्ट्रिंग ज़रूरी नहीं है
मंज़ूरी बाकी हैअगर यह पैरामीटर दिया गया है, तो यह किसी खास उपयोगकर्ता स्क्रिप्ट वर्ल्ड आईडी में लागू होने के बारे में बताता है. यह वैल्यू सिर्फ़ तब मान्य होती है, जब
world
को शामिल न किया गया हो या वहUSER_SCRIPT
हो. अगर इसे शामिल नहीं किया जाता है, तो स्क्रिप्ट डिफ़ॉल्ट उपयोगकर्ता स्क्रिप्ट वर्ल्ड में चलेगी. शुरुआत में अंडरस्कोर (_
) वाली वैल्यू इस्तेमाल नहीं की जा सकतीं.
ScriptSource
प्रॉपर्टी
-
कोड
स्ट्रिंग ज़रूरी नहीं है
इंजेक्ट करने के लिए JavaScript कोड वाली स्ट्रिंग.
file
याcode
में से किसी एक की जानकारी देना ज़रूरी है. -
फ़ाइल
स्ट्रिंग ज़रूरी नहीं है
एक्सटेंशन की रूट डायरेक्ट्री के हिसाब से, इंजेक्ट की जाने वाली JavaScript फ़ाइल का पाथ.
file
याcode
में से किसी एक की जानकारी देना ज़रूरी है.
UserScriptFilter
प्रॉपर्टी
-
आईडी
string[] ज़रूरी नहीं
getScripts
सिर्फ़ इस सूची में दिए गए आईडी वाली स्क्रिप्ट दिखाता है.
WorldProperties
प्रॉपर्टी
-
csp
स्ट्रिंग ज़रूरी नहीं है
दुनिया के सीएसपी के बारे में बताता है. डिफ़ॉल्ट रूप से,
`ISOLATED`
world csp सेट होता है. -
मैसेज सेवा
बूलियन ज़रूरी नहीं है
इससे पता चलता है कि मैसेजिंग एपीआई एक्सपोज़्ड हैं या नहीं. डिफ़ॉल्ट रूप से, यह
false
पर सेट होता है. -
worldId
स्ट्रिंग ज़रूरी नहीं है
मंज़ूरी बाकी हैअपडेट करने के लिए, उपयोगकर्ता स्क्रिप्ट की उस वर्ल्ड का आईडी बताता है. अगर यह पैरामीटर नहीं दिया जाता है, तो डिफ़ॉल्ट उपयोगकर्ता स्क्रिप्ट वर्ल्ड की प्रॉपर्टी अपडेट हो जाती हैं. शुरुआत में अंडरस्कोर (
_
) वाली वैल्यू इस्तेमाल नहीं की जा सकतीं.
तरीके
configureWorld()
chrome.userScripts.configureWorld(
properties: WorldProperties,
callback?: function,
)
`USER_SCRIPT`
के एक्ज़ीक्यूशन एनवायरमेंट को कॉन्फ़िगर करता है.
पैरामीटर
-
प्रॉपर्टी
इसमें उपयोगकर्ता स्क्रिप्ट का वर्ल्ड कॉन्फ़िगरेशन होता है.
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:() => void
रिटर्न
-
Promise<void>
मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.
getScripts()
chrome.userScripts.getScripts(
filter?: UserScriptFilter,
callback?: function,
)
इस एक्सटेंशन के लिए, डाइनैमिक तौर पर रजिस्टर की गई सभी उपयोगकर्ता स्क्रिप्ट दिखाता है.
पैरामीटर
-
फ़िल्टर करें
UserScriptFilter ज़रूरी नहीं है
अगर कोई वैल्यू दी जाती है, तो यह तरीका सिर्फ़ उससे मैच होने वाली उपयोगकर्ता स्क्रिप्ट दिखाता है.
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:(scripts: RegisteredUserScript[]) => void
-
स्क्रिप्ट
-
रिटर्न
-
Promise<RegisteredUserScript[]>
मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.
getWorldConfigurations()
chrome.userScripts.getWorldConfigurations(
callback?: function,
)
दुनिया भर के रजिस्टर किए गए सभी कॉन्फ़िगरेशन को वापस लाता है.
पैरामीटर
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:(worlds: WorldProperties[]) => void
-
दुनिया
-
रिटर्न
-
Promise<WorldProperties[]>
मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.
register()
chrome.userScripts.register(
scripts: RegisteredUserScript[],
callback?: function,
)
इस एक्सटेंशन के लिए, एक या उससे ज़्यादा उपयोगकर्ता स्क्रिप्ट रजिस्टर करता है.
पैरामीटर
-
स्क्रिप्ट
इसमें रजिस्टर की जाने वाली उपयोगकर्ता स्क्रिप्ट की सूची होती है.
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:() => void
रिटर्न
-
Promise<void>
मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.
resetWorldConfiguration()
chrome.userScripts.resetWorldConfiguration(
worldId?: string,
callback?: function,
)
उपयोगकर्ता स्क्रिप्ट की दुनिया के लिए कॉन्फ़िगरेशन को रीसेट करता है. तय किए गए आईडी के साथ दुनिया में इंजेक्ट की जाने वाली सभी स्क्रिप्ट, दुनिया के डिफ़ॉल्ट कॉन्फ़िगरेशन का इस्तेमाल करेंगी.
पैरामीटर
-
worldId
स्ट्रिंग ज़रूरी नहीं है
रीसेट की जाने वाली उपयोगकर्ता स्क्रिप्ट वर्ल्ड का आईडी. अगर यह पैरामीटर नहीं दिया जाता है, तो डिफ़ॉल्ट दुनिया का कॉन्फ़िगरेशन रीसेट हो जाता है.
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:() => void
रिटर्न
-
Promise<void>
मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.
unregister()
chrome.userScripts.unregister(
filter?: UserScriptFilter,
callback?: function,
)
इस एक्सटेंशन के लिए, डाइनैमिक तौर पर रजिस्टर की गई सभी उपयोगकर्ता स्क्रिप्ट को अनरजिस्टर कर देता है.
पैरामीटर
-
फ़िल्टर करें
UserScriptFilter ज़रूरी नहीं है
अगर कोई पैटर्न तय किया गया है, तो यह तरीका सिर्फ़ उससे मैच होने वाली उपयोगकर्ता स्क्रिप्ट को अनरजिस्टर करता है.
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:() => void
रिटर्न
-
Promise<void>
मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.
update()
chrome.userScripts.update(
scripts: RegisteredUserScript[],
callback?: function,
)
इस एक्सटेंशन के लिए, एक या उससे ज़्यादा उपयोगकर्ता स्क्रिप्ट अपडेट करता है.
पैरामीटर
-
स्क्रिप्ट
इसमें उन उपयोगकर्ता स्क्रिप्ट की सूची होती है जिन्हें अपडेट करना है. किसी मौजूदा स्क्रिप्ट के लिए प्रॉपर्टी सिर्फ़ तब अपडेट की जाती है, जब इस ऑब्जेक्ट में उसकी जानकारी दी गई हो. अगर स्क्रिप्ट को पार्स करने/फ़ाइल की पुष्टि करने के दौरान गड़बड़ियां होती हैं या दिए गए आईडी, पूरी तरह से रजिस्टर की गई स्क्रिप्ट से मेल नहीं खाते हैं, तो कोई भी स्क्रिप्ट अपडेट नहीं की जाती.
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:() => void
रिटर्न
-
Promise<void>
मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.