জাভাস্ক্রিপ্ট ফাইলগুলিতে পরামিতিগুলি পাস করা


163

প্রায়শই আমার কাছে একটি জাভাস্ক্রিপ্ট ফাইল থাকবে যা আমি ব্যবহার করতে চাই যার জন্য আমার ওয়েব পৃষ্ঠায় নির্দিষ্ট ভেরিয়েবল সংজ্ঞায়িত করা প্রয়োজন।

কোডটি এরকম কিছু:

<script type="text/javascript" src="file.js"></script>
<script type="text/javascript">
   var obj1 = "somevalue";
</script>

তবে আমি যা করতে চাই তা হ'ল:

<script type="text/javascript" 
     src="file.js?obj1=somevalue&obj2=someothervalue"></script>

আমি বিভিন্ন পদ্ধতি চেষ্টা করেছি এবং এখনও সেরাটি হল ক্যোরির স্ট্রিংটিকে এভাবে পার্স করা:

var scriptSrc = document.getElementById("myscript").src.toLowerCase();

এবং তারপরে আমার মানগুলি অনুসন্ধান করুন।

আমি আশ্চর্য হয়েছি যে আমার স্ট্রিংকে বিশ্লেষণ করার জন্য কোনও ফাংশন তৈরি না করে এটি করার অন্য কোনও উপায় আছে কিনা।

আপনি কি অন্যান্য পদ্ধতি জানেন?


9
এটি একটি সদৃশ প্রশ্ন ( স্ট্যাকওভারফ্লো.com / প্রশ্নস ১০০১74৪৪৪/২ ) এবং আমার মতে একটি বিভ্রান্ত নকশা। হয় আপনার প্রথম ভেরিয়েবল সমাধান (ঠিক আছে) ব্যবহার করা অনেক সহজ, বা স্ক্রিপ্টটি এমন কোনও ক্রিয়া সংজ্ঞায়িত করে যা ভেরিয়েবল (আরও ভাল) দিয়ে ডাকা হয়।
ম্যাথু ফ্ল্যাশেন

আমি একটি আপডেট সমাধান খুঁজছি যা নতুন ECMAScript 6 কার্যকারিতার সুবিধা গ্রহণ করে ... যদি কোনও হয়
শেফ_কোড

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

উত্তর:


207

আমি সম্ভব হলে গ্লোবাল ভেরিয়েবল ব্যবহার না করার পরামর্শ দেব। কোনও যুক্তিতে আপনার যুক্তিগুলি পাস করার জন্য একটি নেমস্পেস এবং OOP ব্যবহার করুন।

এই কোডটি file.js এর অন্তর্গত:

var MYLIBRARY = MYLIBRARY || (function(){
    var _args = {}; // private

    return {
        init : function(Args) {
            _args = Args;
            // some other initialising
        },
        helloWorld : function() {
            alert('Hello World! -' + _args[0]);
        }
    };
}());

এবং আপনার এইচটিএমএল ফাইলটিতে:

<script type="text/javascript" src="file.js"></script>
<script type="text/javascript">
   MYLIBRARY.init(["somevalue", 1, "controlId"]);
   MYLIBRARY.helloWorld();
</script>

4
@ নাeম - মাইলিবিআরআইআইএনইটি (["কিছুটা", "," কন্ট্রোলআইডি "]) এর 100% সময় লোড করা ফাইলগুলি; js; মৃত্যুদণ্ড কার্যকর হয়? হতে পারে আমাদের এটি নথিতে প্রস্তুত করার দরকার আছে?
দারিয়াস.ভি

2
1) মাইলিবারি যদি বিদ্যমান থাকে তবে এটি ব্যবহার করুন বা একটি নতুন অবজেক্টের সংজ্ঞা দিন। উদ্দেশ্যটি বিশ্বব্যাপী নেমস্পেস তৈরি করা, সাধারণত আমি সাব নেমস্পেস ব্যবহার করব তাই এই লাইনটি শীর্ষ স্তরের নাম স্থানটি পুনরায় সংজ্ঞা এড়াতে সহায়তা করে। 2) হ্যাঁ, এটি একটি সিঙ্গলটন তৈরি করেছে।
সরফরাজ

1
আমি এই ধারণার একটি উদাহরণ তৈরি করেছি: http://plnkr.co/edit/iE0Vr7sszfqrrDIsR8Wi?p=preview
robe007

1
এই অভিব্যক্তিটির অর্থ কী? var MYLIBRARY = MYLIBRARY || (function(){}());? কেন MYLIBRARYএকটি বুলিয়ান মান সেট করা উচিত ?
অ্যালেক্স

1
@Alexander, উপরোক্ত আমার মন্তব্য দেখতে stackoverflow.com/questions/2190801/...
নাঈম সরফরাজ

79

আপনি নির্বিচারে বৈশিষ্ট্য সহ পরামিতিগুলি পাস করতে পারেন। এটি সাম্প্রতিক সমস্ত ব্রাউজারগুলিতে কাজ করে।

<script type="text/javascript" data-my_var_1="some_val_1" data-my_var_2="some_val_2" src="/js/somefile.js"></script>

Somefile.js এর ভিতরে আপনি এইভাবে পাস ভেরিয়েবলের মান পেতে পারেন:

........

var this_js_script = $('script[src*=somefile]'); // or better regexp to get the file name..

var my_var_1 = this_js_script.attr('data-my_var_1');   
if (typeof my_var_1 === "undefined" ) {
   var my_var_1 = 'some_default_value';
}
alert(my_var_1); // to view the variable value

var my_var_2 = this_js_script.attr('data-my_var_2');   
if (typeof my_var_2 === "undefined" ) {
   var my_var_2 = 'some_default_value';
}
alert(my_var_2); // to view the variable value

... ইত্যাদি ...


1
খুব সুন্দর সমাধান, এটি এমনকি অ্যাসিঙ্ক বৈশিষ্ট্যের সাথেও কাজ করে।
ViRuSTriNiTy

2
পুরানো তবে যারা গুগল করছে তাদের জন্য: আপনার যদি কোনও সিএসপি (বিষয়বস্তু সুরক্ষা নীতি) এর আশেপাশে কাজ করার দরকার হয় তবে এটি দুর্দান্ত। আমরা প্রচুর স্ক্রিপ্ট ব্যবহার করি যার মধ্যে আমরা ভাষা সংস্থান এবং এপিআই কী ইত্যাদি থেকে নির্ধারিত স্ট্রিংগুলি জেএস ফাইলগুলিতে পাস করি।
monkeySeeMonkeyDo

2
নোট করুন যে আপনিও ব্যবহার করতে পারেন document.currentScript, caniuse.com/#feat=docament- সার্থক স্ক্রিপ্টটি সামঞ্জস্যের জন্য (বা পলিফিল ব্যবহার করুন)
ইয়ভেস এম

$(..)সিনট্যাক্স jQuery হয় ভুলবেন না তা অন্তর্ভুক্ত করা হয়।
টিমো

48

আর একটি ধারণা যা আমি এসেছিলাম idতা হল <script>উপাদানকে একটি বরাদ্দ করা এবং যুক্তিগুলি data-*বৈশিষ্ট্য হিসাবে পাস করা । ফলস্বরূপ <script>ট্যাগটি এর মতো দেখতে লাগবে:

<script id="helper" data-name="helper" src="helper.js"></script>

এরপরে স্ক্রিপ্টটি আইডিটি প্রোগ্রামিকভাবে নিজের সনাক্ত করতে এবং যুক্তিগুলি পার্স করতে পারে। পূর্ববর্তী <script>ট্যাগ দেওয়া, নামটি এইভাবে পুনরুদ্ধার করা যেতে পারে:

var name = document.getElementById("helper").getAttribute("data-name");

আমরা পেয়েছি name=helper


4
আপনি যদি আইডি বৈশিষ্ট্যের উপর নির্ভর করতে না চান, আপনি পৃষ্ঠার helper.jsসমস্ত scriptট্যাগের মাধ্যমে স্ক্রিপ্ট লুপটি তৈরি করতে পারেন , যার সাথে scr="helper.js"একটিটি অনুসন্ধান করে এবং তারপরে এক্সট্রাক্ট করতে পারেন data-name
jvannistelrooy

1
@ জাভান্নিসটেলারয় আমি চেষ্টা করি নি তবে আমি বিশ্বাস করি যে একজনকে jquery এবং এর মতো চতুর নির্বাচকের মাধ্যমে স্ক্রিপ্টে পৌঁছানো উচিত: var this_js_script = $('script[src*=somefile]');( উপরে থেকে অনুলিপি করা হয়েছে )
লসম্যানোস

19

এই URL টি দেখুন। এটি প্রয়োজনের জন্য নিখুঁতভাবে কাজ করছে।

http://feather.elektrum.org/book/src.html

লেখককে অনেক ধন্যবাদ। দ্রুত রেফারেন্সের জন্য আমি নীচের মূল যুক্তিটি পেস্ট করেছি:

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

var queryString = myScript.src.replace(/^[^\?]+\??/,'');

var params = parseQuery( queryString );

function parseQuery ( query ) {
  var Params = new Object ();
  if ( ! query ) return Params; // return empty object
  var Pairs = query.split(/[;&]/);
  for ( var i = 0; i < Pairs.length; i++ ) {
    var KeyVal = Pairs[i].split('=');
    if ( ! KeyVal || KeyVal.length != 2 ) continue;
    var key = unescape( KeyVal[0] );
    var val = unescape( KeyVal[1] );
    val = val.replace(/\+/g, ' ');
    Params[key] = val;
  }
  return Params;
}

1
আমি এই সমাধানটি পছন্দ করেছি, তবে সামান্য এটি সংশোধন করে খণ্ড খণ্ডনকারীকে ব্যবহার করতে পারি, যাতে এটি ক্যাশে আবদ্ধ না করে: var frag = myScript.src.replace (/ ^ [^ \ #] + \ #? /, '') ;
মার্ক নটিংহাম

ওহ, এবং আমি দেখতে পেয়েছি যে JSON স্থাপন সেখানে কাজ করে, আপনি যতক্ষণ না এটি urlencode করেন।
মার্ক নটিংহাম

@ user378221 - আপনি কি নিশ্চিত যে এটি সর্বদা সঠিক ফাইলটি পাবেন? আমি বোঝাতে চাইছি এই ফাইলটি শেষ। এটি কার্যকর করার আগে যদি আরও স্ক্রিপ্ট ট্যাগগুলি লোড করা হয় তবে কী হবে? সম্ভব কিনা তা আমি জানি না, তবে আমি ধরে নিয়েছি নথিটি অন্য ট্যাগ লোড করার জন্য কোড এক্সিকিউশনটির জন্য অপেক্ষা করে না?
দারিয়াস.ভি

ফাংশনটি হ্রাস করা হয়েছে বলে আনসকেপের পরিবর্তে ডিকোডুরি () বা ডিকোডিউরিওকম্পোন্ট () ব্যবহার করা আরও ভাল।
স্টিভ চাইল্ডস

@ দারিয়াস.ভি এটি অ-অ্যাসিঙ্ক স্ক্রিপ্টগুলির জন্য কাজ করে। আমি অপশন 1 বিকল্প ফলের ব্যাক 5 হিসাবে ব্যবহার করতে পছন্দ করি ।
লুক

14

আপনি গ্লোবাল ভেরিয়েবলগুলি ব্যবহার করেন :- ডি।

এটার মত:

<script type="text/javascript">
   var obj1 = "somevalue";
   var obj2 = "someothervalue";
</script>
<script type="text/javascript" src="file.js"></script">

'File.js' এ জাভাস্ক্রিপ্ট কোড কোনও সমস্যা ছাড়াই obj1এবং অ্যাক্সেস করতে পারে obj2

সম্পাদনা করুন কেবল যোগ করতে চান যদি 'file.js' চেক করতে চায় obj1এবং obj2এমনকি ঘোষিত হয়ে থাকে আপনি নীচের ফাংশনটি ব্যবহার করতে পারেন।

function IsDefined($Name) {
    return (window[$Name] != undefined);
}

আশাকরি এটা সাহায্য করবে.


এটি আইইতে একটি নির্বিঘ্ন ত্রুটি ফেলে দেবে। সেই ফাংশনের পছন্দের বডিটি return typeof window[$Name] !== 'undefined';। দয়া করে নোট করুন যে আপনি সেই ফাংশনটি ভেরিয়েবলের নাম সহ একটি স্ট্রিং পাস করবেন pass কলিং কোডে ভেরিয়েবলটি উপস্থিত রয়েছে কিনা তা সহজেই পরীক্ষা করা সহজ (এটি কোনও ফাংশন হিসাবে প্রয়োগ করা যায় না) মাধ্যমে if (typeof var !== 'undefined')
অ্যান্টনি ডিসন্তি

2
ওহ, কখনই আইই ব্যবহার করবেন না। দুঃখিত।
নওয়ামন

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

আপনি বাদ দিতে পারেন var
টিমো

12

এখানে ধারণার খুব তাড়াতাড়ি প্রমাণ রয়েছে।

আমি নিশ্চিত যে কমপক্ষে 2 টি জায়গা রয়েছে যেখানে উন্নতি হতে পারে এবং আমি নিশ্চিত যে এটি বন্যের বেশি দিন টিকে থাকবে না। এটিকে আরও উপস্থাপনযোগ্য বা ব্যবহারযোগ্য করে তোলার জন্য যে কোনও প্রতিক্রিয়া স্বাগত।

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

স্ক্রিপ্ট বলা হচ্ছে:

window.onload = function() {
//Notice that both possible parameters are pre-defined.
//Which is probably not required if using proper object notation
//in query string, or if variable-variables are possible in js.
var header;
var text;

//script gets the src attribute based on ID of page's script element:
var requestURL = document.getElementById("myScript").getAttribute("src");

//next use substring() to get querystring part of src
var queryString = requestURL.substring(requestURL.indexOf("?") + 1, requestURL.length);

//Next split the querystring into array
var params = queryString.split("&");

//Next loop through params
for(var i = 0; i < params.length; i++){
 var name  = params[i].substring(0,params[i].indexOf("="));
 var value = params[i].substring(params[i].indexOf("=") + 1, params[i].length);

    //Test if value is a number. If not, wrap value with quotes:
    if(isNaN(parseInt(value))) {
  params[i] = params[i].replace(value, "'" + value + "'");
 }

    // Finally, use eval to set values of pre-defined variables:
 eval(params[i]);
}

//Output to test that it worked:
document.getElementById("docTitle").innerHTML = header;
document.getElementById("docText").innerHTML = text;
};

নিম্নলিখিত পৃষ্ঠার মাধ্যমে স্ক্রিপ্ট কল করা:

<script id="myScript" type="text/javascript" 
        src="test.js?header=Test Page&text=This Works"></script>

<h1 id="docTitle"></h1>
<p id="docText"></p>

সুতরাং eval আসলে গ্লোবাল ভেরিয়েবল হিসাবে মান সেট করবে ... বেশ দুর্দান্ত।
রডমজয়

1
evilভাল মন্দ কাজ থেকে দূরে পালিয়ে যায়
ব্যারি চ্যাপম্যান

@ বার্যচ্যাপম্যান - ওহ ম্যান, ২০১০. আমি অবাক হয়েছি সেখানে 10 টি লাল পতাকা ছিল না।
অ্যান্টনি

9

খুব সহজ হতে পারে

উদাহরণ স্বরূপ

<script src="js/myscript.js?id=123"></script>
<script>
    var queryString = $("script[src*='js/myscript.js']").attr('src').split('?')[1];
</script>

এরপরে আপনি কোয়েরি স্ট্রিংটিকে নীচের মত জসনে রূপান্তর করতে পারেন

var json = $.parseJSON('{"' 
            + queryString.replace(/&/g, '","').replace(/=/g, '":"') 
            + '"}');

এবং তারপরে যেমন ব্যবহার করতে পারেন

console.log(json.id);

6

আপনি jQuery এর মতো কিছু জাভাস্ক্রিপ্ট ফ্রেমওয়ার্ক ব্যবহার করছেন তবে এটি সহজেই করা যায়। তাই ভালো,

var x = $('script:first').attr('src'); //Fetch the source in the first script tag
var params = x.split('?')[1]; //Get the params

এখন আপনি আপনার পরিবর্তনশীল পরামিতি হিসাবে বিভক্ত হয়ে এই প্যারামগুলি ব্যবহার করতে পারেন।

একই প্রক্রিয়াটি কোনও কাঠামো ছাড়াই করা যেতে পারে তবে কোডের আরও কয়েকটি লাইন লাগবে।


2
পার্সিকুয়েরি নামে একটি জিকুয়েরি প্লাগইন রয়েছে যা এটি আরও সহজ করে তোলে: প্লাগইনস.জকোয়ারি
জিমি

@ জিমিকুয়াদ্রা - দুর্ভাগ্যক্রমে, আপনার সরবরাহিত লিঙ্কটি ভেঙে গেছে। তবে আমি jQuery নিজেই একটি অনুরূপ পন্থা পেয়েছি: jQuery.param ()
ম্যাট

1

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

এই জেএস-ফাইলগুলির ক্রমাগত পরিবর্তন হওয়ার কারণে আপনি যে কোনও ক্যাচিং হারাচ্ছেন তা সতর্ক থাকুন।

বাই।


1
কেন এটি নিম্নমানের ছিল তা বুঝতে পারি না। এটি একটি পুরোপুরি বৈধ সমাধান যা সার্ভার-সাইড লজিকের অবলম্বন করে। আমি যতদূর দেখতে পাচ্ছি, ওপিকে এটি সম্পূর্ণ জাভাস্ক্রিপ্ট সমাধান হওয়ার দরকার নেই।
অ্যানয়েজ

@ এএফএক্সএক্স - আপনি ঠিক বলেছেন। <script>ব্লকের ভিতরে আপনি MyModule.Initialize( '<%: Model.SomeProperty%>', '<%: Model.SomeOtherProperty%>', ...);সার্ভারে রেন্ডার মতো কিছু ব্যবহার করতে পারেন । সতর্কতা: মানটি অতিক্রম করে <%:, যখন <%=মানটি অবিচ্ছিন্ন করে প্রেরণ করে। MyModuleএকটি নেমস্পেস (অর্থাত্ .js ফাইলের অভ্যন্তরে একটি ভেরিয়েবল যা স্ব-আহ্বান করা হয়, যা কার্যটি প্রকাশ করে Initialize)। আমি আপনার উত্তরটিকে অগ্রাহ্য করেছি, কারণ এটি একটি সহায়ক অবদান।
ম্যাট

দ্রষ্টব্য: ধারণাটি, কীভাবে একটি মডিউল তৈরি করতে হয় যা একটি উন্মুক্ত সম্পত্তি রয়েছে সে সম্পর্কে এখানে আরও বিস্তারিতভাবে এই পৃষ্ঠায় বর্ণনা করা হয়েছে
ম্যাট

1

দুর্দান্ত প্রশ্ন এবং সৃজনশীল উত্তর কিন্তু আমার সজ্জনটি হ'ল আপনার পদ্ধতিগুলিকে প্যারামটারাইজ করা এবং এটি কোনও কৌশল না করে আপনার সমস্ত সমস্যার সমাধান করা উচিত।

আপনার যদি ফাংশন থাকে:

function A()
{
    var val = external_value_from_query_string_or_global_param;
}

আপনি এটিকে পরিবর্তন করতে পারেন:

function B(function_param)
{
    var val = function_param;
}

আমি মনে করি এটি সবচেয়ে প্রাকৃতিক পদ্ধতির, আপনাকে 'ফাইলের পরামিতিগুলি' সম্পর্কে অতিরিক্ত ডকুমেন্টেশন ক্রেট করার দরকার নেই এবং আপনি এটি গ্রহণ করেন। আপনি অন্য বিকাশকারীদের আপনার জেএস ফাইল ব্যবহার করার অনুমতি দিলে এটি বিশেষভাবে কার্যকর।


0

না, আপনি জেএস ফাইল URL এর ক্যোরিস্টিং অংশে ভেরিয়েবল যুক্ত করে সত্যই এটি করতে পারবেন না। যদি কোডটির অংশটি লেখার ক্ষেত্রে স্ট্রিংটি পার্স করে যা আপনাকে বিরক্ত করে, সম্ভবত অন্য কোনও উপায় হ'ল জসন আপনার ভেরিয়েবলগুলি এনকোড করে এগুলি ট্যাগের rel বৈশিষ্ট্যের মতো কিছুতে রাখবে? এইচটিএমএল যাচাইয়ের ক্ষেত্রে এটি কতটা বৈধ তা আমি জানি না, যদি এমন কিছু হয় যা আপনি খুব চিন্তিত হন। তারপরে আপনাকে কেবল স্ক্রিপ্টের rel বৈশিষ্ট্যটি খুঁজে বের করতে হবে এবং তারপরে এটি json_decode।

যেমন

<script type='text/javascript' src='file.js' rel='{"myvar":"somevalue","anothervar":"anothervalue"}'></script>

2
আপনি এটি জাল ক্যোরিস্ট্রিং দিয়ে করতে পারেন। এটি ঠিক একটি ভাল ধারণা নয়। তবে উভয়ই এটি নয়। Rel বৈশিষ্ট্যটি কোনও ধরণের লিঙ্ক সম্পর্কের নির্দিষ্টকরণের জন্য বোঝানো হয়, কোনও স্ক্রিপ্ট ট্যাগে এলোমেলো ডেটা ক্র্যাম করে না।
ম্যাথু ফ্ল্যাশেন

1
আমি সম্মত আমি এটিকে ঠিক যেমন রেখে দিয়েছি এবং <script> var obj1 = "কিছু পরিমাণ" </script> পদ্ধতির ব্যবহার, এটি সর্বোত্তম উপায়, এবং আমি বিশ্বাস করি - সঠিক উপায়ে কোনও সমস্যা দেখতে পাচ্ছি না।
ডাল হুন্দল

0

এটি বৈধ এইচটিএমএল নয় (আমার মনে হয় না) তবে আপনি যদি নিজের ওয়েবপৃষ্ঠায় স্ক্রিপ্ট ট্যাগের জন্য একটি কাস্টম বৈশিষ্ট্য তৈরি করেন তবে এটি কাজ করে বলে মনে হচ্ছে :

<script id="myScript" myCustomAttribute="some value" ....>

তারপরে জাভাস্ক্রিপ্টে কাস্টম বৈশিষ্ট্যটি অ্যাক্সেস করুন:

var myVar = document.getElementById( "myScript" ).getAttribute( "myCustomAttribute" );

স্ক্রিপ্ট উত্স স্ট্রিংকে পার্স করার চেয়ে এটি ভাল বা খারাপ কিনা তা নিশ্চিত নন।


0

আপনার যদি সিএসপি চেকটি পাস করার কোনও পথের প্রয়োজন হয় (যা অনিরাপদ-ইনলাইন নিষিদ্ধ করে) তবে আপনাকে স্ক্রিপ্ট এবং সিএসপি নির্দেশিকা উভয়েরই একটি অনন্য মান যুক্ত করতে বা নথিকে এইচটিএমএল লিখতে এবং সেগুলি আবার পড়তে হবে non

এক্সপ্রেস.জেএস এর জন্য ননস পদ্ধতি:

const uuidv4 = require('uuid/v4')

app.use(function (req, res, next) {
  res.locals.nonce = uuidv4()
  next()
})

app.use(csp({
  directives: {
    scriptSrc: [
      "'self'",
      (req, res) => `'nonce-${res.locals.nonce}'`  // 'nonce-614d9122-d5b0-4760-aecf-3a5d17cf0ac9'
    ]
  }
}))

app.use(function (req, res) {
  res.end(`<script nonce="${res.locals.nonce}">alert(1 + 1);</script>`)
})

অথবা এইচটিএমএল পদ্ধতিতে মান লিখুন। এই ক্ষেত্রে Jquery ব্যবহার করে:

<div id="account" data-email="{{user.email}}"></div>
...


$(document).ready(() => {
    globalThis.EMAIL = $('#account').data('email');
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.