সামগ্রীর স্ক্রিপ্টগুলি "বিচ্ছিন্ন বিশ্বের" পরিবেশে কার্যকর করা হয় । আপনাকে নিজের state()
পদ্ধতিটি পৃষ্ঠাতে ইনজেক্ট করতে হবে।
আপনি যখন chrome.*
স্ক্রিপ্টের কোনও একটি API ব্যবহার করতে চান , আপনাকে একটি বিশেষ ইভেন্ট হ্যান্ডলারটি প্রয়োগ করতে হবে, এই উত্তরে বর্ণিত হিসাবে: ক্রোম এক্সটেনশন - Gmail এর মূল বার্তাটি পুনরুদ্ধার করা ।
অন্যথায়, যদি আপনাকে chrome.*
এপিআই ব্যবহার করতে না হয় , তবে আমি দৃ strongly়ভাবে একটি <script>
ট্যাগ যুক্ত করার মাধ্যমে পৃষ্ঠায় আপনার সমস্ত জেএস কোডটি ইনজেক্ট করার পরামর্শ দিচ্ছি :
সুচিপত্র
- পদ্ধতি 1: অন্য একটি ফাইল ইনজেক্ট করুন
- পদ্ধতি 2: এম্বেড কোডটি ইনজেক্ট করুন
- পদ্ধতি 2 বি: একটি ফাংশন ব্যবহার করে
- পদ্ধতি 3: একটি ইনলাইন ইভেন্ট ব্যবহার করা
- ইনজেকশন কোডটিতে গতিশীল মান
পদ্ধতি 1: অন্য একটি ফাইল ইনজেক্ট করুন
আপনার প্রচুর কোড থাকলে এটি সবচেয়ে সহজ / সেরা পদ্ধতি। আপনার এক্সটেনশনের মধ্যে একটি ফাইলে আপনার আসল জেএস কোড অন্তর্ভুক্ত করুন, বলুন script.js
। তারপরে আপনার কন্টেন্ট স্ক্রিপ্টটি নীচের মতো হতে দিন (এখানে ব্যাখ্যা করা হয়েছে: গুগল কোম "অ্যাপ্লিকেশন শর্টকাট" কাস্টম জাভাস্ক্রিপ্ট ):
var s = document.createElement('script');
// TODO: add "script.js" to web_accessible_resources in manifest.json
s.src = chrome.runtime.getURL('script.js');
s.onload = function() {
this.remove();
};
(document.head || document.documentElement).appendChild(s);
দ্রষ্টব্য: আপনি যদি এই পদ্ধতিটি ব্যবহার করেন তবে ইঞ্জেকশন করা script.js
ফাইলটি "web_accessible_resources"
বিভাগে ( উদাহরণ ) যুক্ত করতে হবে । আপনি যদি তা না করেন তবে Chrome আপনার স্ক্রিপ্টটি লোড করতে অস্বীকার করবে এবং কনসোলে নিম্নলিখিত ত্রুটিটি প্রদর্শন করবে:
ক্রোম-এক্সটেনশনের লোডকে অস্বীকার করা হচ্ছে: // [এক্সটেনশিয়ান্ড] /script.js। এক্সটেনশনের বাইরের পৃষ্ঠাগুলি দ্বারা লোড করার জন্য সংস্থানগুলি অবশ্যই ওয়েব_অ্যাক্সেসযোগ্য_সোর্স ম্যানিফেস্ট কীতে তালিকাবদ্ধ থাকতে হবে।
পদ্ধতি 2: এম্বেড কোডটি ইনজেক্ট করুন
আপনি কোডের একটি ছোট অংশটি দ্রুত চালাতে চাইলে এই পদ্ধতিটি কার্যকর is (আরও দেখুন: ক্রোম এক্সটেনশান সহ ফেসবুক হটকি কীভাবে অক্ষম করবেন? )
var actualCode = `// Code here.
// If you want to use a variable, use $ and curly braces.
// For example, to use a fixed random number:
var someFixedRandomValue = ${ Math.random() };
// NOTE: Do not insert unsafe variables in this way, see below
// at "Dynamic values in the injected code"
`;
var script = document.createElement('script');
script.textContent = actualCode;
(document.head||document.documentElement).appendChild(script);
script.remove();
দ্রষ্টব্য: টেমপ্লেট লিটারেলগুলি কেবলমাত্র ক্রম 41 এবং তারপরে সমর্থিত। আপনি যদি ক্রম 40- এ এক্সটেনশনটি কাজ করতে চান তবে ব্যবহার করুন:
var actualCode = ['/* Code here. Example: */' + 'alert(0);',
'// Beware! This array have to be joined',
'// using a newline. Otherwise, missing semicolons',
'// or single-line comments (//) will mess up your',
'// code ----->'].join('\n');
পদ্ধতি 2 বি: একটি ফাংশন ব্যবহার করে
কোডের একটি বড় অংশের জন্য, স্ট্রিংটির উদ্ধৃতি দেওয়া সম্ভব নয়। অ্যারে ব্যবহারের পরিবর্তে একটি ফাংশন ব্যবহার করা যেতে পারে এবং স্ট্রিংফাইড করা যায়:
var actualCode = '(' + function() {
// All code is executed in a local scope.
// For example, the following does NOT overwrite the global `alert` method
var alert = null;
// To overwrite a global variable, prefix `window`:
window.alert = null;
} + ')();';
var script = document.createElement('script');
script.textContent = actualCode;
(document.head||document.documentElement).appendChild(script);
script.remove();
এই পদ্ধতিটি কাজ করে, কারণ +
স্ট্রিংগুলিতে অপারেটর এবং একটি ফাংশন সমস্ত বস্তুকে একটি স্ট্রিংয়ে রূপান্তর করে। যদি আপনি কোডটি একাধিকবার ব্যবহারের উদ্দেশ্যে থাকেন তবে কোড পুনরাবৃত্তি এড়াতে কোনও ফাংশন তৈরি করা বুদ্ধিমানের কাজ। একটি বাস্তবায়ন এর মত দেখতে পারে:
function injectScript(func) {
var actualCode = '(' + func + ')();'
...
}
injectScript(function() {
alert("Injected script");
});
দ্রষ্টব্য: ফাংশনটি ক্রমিকায়িত হওয়ার কারণে, আসল সুযোগ এবং সমস্ত সীমাবদ্ধ বৈশিষ্ট্যগুলি হারিয়ে গেছে!
var scriptToInject = function() {
console.log(typeof scriptToInject);
};
injectScript(scriptToInject);
// Console output: "undefined"
পদ্ধতি 3: একটি ইনলাইন ইভেন্ট ব্যবহার করা
কখনও কখনও আপনি কিছু কোড তত্ক্ষণাত চালাতে চান, যেমন <head>
উপাদান তৈরির আগে কিছু কোড চালানো । এটি <script>
দিয়ে একটি ট্যাগ প্রবেশ করিয়ে করা যায় textContent
(পদ্ধতি 2/2 বি দেখুন)।
একটি বিকল্প, তবে প্রস্তাবিত নয় ইনলাইন ইভেন্টগুলি ব্যবহার করা use এটি প্রস্তাবিত নয় কারণ যদি পৃষ্ঠাটি কোনও সামগ্রী সুরক্ষা নীতি সংজ্ঞায়িত করে যা ইনলাইন স্ক্রিপ্টগুলি নিষিদ্ধ করে, তবে ইনলাইন ইভেন্ট শ্রোতাগুলিকে অবরুদ্ধ করা হবে। অন্যদিকে এক্সটেনশন দ্বারা ইনজেক্ট করা ইনলাইন স্ক্রিপ্টগুলি এখনও চলছে। আপনি যদি এখনও ইনলাইন ইভেন্টগুলি ব্যবহার করতে চান তবে এইভাবে:
var actualCode = '// Some code example \n' +
'console.log(document.documentElement.outerHTML);';
document.documentElement.setAttribute('onreset', actualCode);
document.documentElement.dispatchEvent(new CustomEvent('reset'));
document.documentElement.removeAttribute('onreset');
দ্রষ্টব্য: এই পদ্ধতিটি ধরে নিয়েছে যে ইভেন্টটি পরিচালনা করে এমন কোনও বিশ্বব্যাপী ইভেন্ট শ্রোতা নেই reset
। যদি থাকে তবে আপনি অন্যান্য বৈশ্বিক ইভেন্টগুলির মধ্যে একটি চয়ন করতে পারেন। কেবল জাভাস্ক্রিপ্ট কনসোল (F12) খুলুন, টাইপ document.documentElement.on
করুন এবং উপলভ্য ইভেন্টগুলির চয়ন করুন।
ইনজেকশন কোডটিতে গতিশীল মান
মাঝেমধ্যে, আপনাকে ইনজেকশন ফাংশনটিতে একটি স্বেচ্ছাসেবী পরিবর্তন করতে হবে pass উদাহরণ স্বরূপ:
var GREETING = "Hi, I'm ";
var NAME = "Rob";
var scriptToInject = function() {
alert(GREETING + NAME);
};
এই কোডটি ইনজেক্ট করার জন্য, আপনাকে বেনামে ফাংশনে আর্গুমেন্ট হিসাবে ভেরিয়েবলগুলি পাস করতে হবে। এটি সঠিকভাবে প্রয়োগ করতে ভুলবেন না! নিম্নলিখিতগুলি কাজ করবে না :
var scriptToInject = function (GREETING, NAME) { ... };
var actualCode = '(' + scriptToInject + ')(' + GREETING + ',' + NAME + ')';
// The previous will work for numbers and booleans, but not strings.
// To see why, have a look at the resulting string:
var actualCode = "(function(GREETING, NAME) {...})(Hi, I'm ,Rob)";
// ^^^^^^^^ ^^^ No string literals!
JSON.stringify
যুক্তিটি পাস করার আগে সমাধানটি ব্যবহার করা হয় । উদাহরণ:
var actualCode = '(' + function(greeting, name) { ...
} + ')(' + JSON.stringify(GREETING) + ',' + JSON.stringify(NAME) + ')';
আপনার যদি অনেকগুলি ভেরিয়েবল থাকে তবে JSON.stringify
পড়ার যোগ্যতা উন্নত করতে একবারে এটি ব্যবহার করা সার্থক :
...
} + ')(' + JSON.stringify([arg1, arg2, arg3, arg4]) + ')';
player.addEventListener("onStateChange", state);