जावास्क्रिप्ट में दुविधा से बचें

मेरे पास निम्नलिखित है

var id='123';

newDiv.innerHTML = "";

जो मेरे एचटीएमएल में प्रस्तुत करता है।

मेरी समस्या यह है कि मैं विधि परीक्षण विधि को कॉल करना चाहता हूं, और मेरे फ़ंक्शन StepTwo (स्ट्रिंग, बूलियन) में एक स्ट्रिंग पैरामीटर के रूप में उपयोग करना चाहता हूं, जो दिखाए गए अनुसार लाइव HTML में आदर्श रूप से समाप्त होता है ...


ध्यान दें कि टेस्टफंक्शन यहां एक स्ट्रिंग है (इसे eval का उपयोग करके StepTwo के भीतर निष्पादित किया जाता है)।

मैंने अपने जेएस को प्रारूपित करने की कोशिश की है:

newDiv.innerHTML = "";

लेकिन जब यह मेरे आईडीई में सही है, तो प्रस्तुत एचटीएमएल में, यह विश्वास से परे गड़बड़ कर रहा है।

अगर कोई मुझे सही दिशा में इंगित कर सकता है तो सराहना करेंगे। धन्यवाद!

0

11 उत्तर

  1. आपको अपने "और '।

  2. को वैकल्पिक करने की आवश्यकता है
  3. शायद आपको जावास्क्रिप्ट लचीली टाइपिंग की वजह से 123 के आसपास उद्धरण की आवश्यकता नहीं है। उद्धरण के बिना इसे पास करें लेकिन टेस्टफंक्शन के भीतर एक स्ट्रिंग के रूप में इसका इलाज करें।

0
जोड़ा

अरे दोस्तों, सभी उत्तरों के लिए धन्यवाद। मुझे लगता है कि quot; सबसे अच्छा काम करता प्रतीत होता है।

एक बार मुझे और प्रतिष्ठा मिलने के बाद मैं आपको कुछ वोट दूंगा!

Eval() के संबंध में, आप जो सवाल देखते हैं वह आवेदन के बहुत छोटे स्नैपशॉट विकसित किए जा रहे हैं। मैं eval की विपत्तियों को समझता हूं, हालांकि, यह उन दस लाख स्थितियों में से एक है जहां यह स्थिति की स्थिति के लिए सही विकल्प है।

यह बेहतर समझा जाएगा यदि आप देख सकते हैं कि ये कार्य क्या करते हैं (उन्हें स्टैक ओवरफ्लो के लिए बहुत सामान्य नाम दिए गए हैं)।

एक बार फिर धन्यवाद!

0
जोड़ा
समझा, और यह 1/100 बार है। चीयर्स। इच्छा है कि मैं इसके बारे में और बात कर सकता हूं लेकिन मैं जिस विशिष्ट कोड पर काम कर रहा हूं उसके बारे में बात करने की जगह नहीं है।
जोड़ा लेखक RekrowYnapmoc, स्रोत
संभावना है कि अगर आपको लगता है कि आपको eval के लिए एक वैध मुकदमा मिला है, तो आप जावास्क्रिप्ट/डोम के बारे में पर्याप्त नहीं जानते हैं।
जोड़ा लेखक Kent Fredric, स्रोत
(बंद करने का प्रभावी उपयोग इवल 99/100 बार ट्रम्प)
जोड़ा लेखक Kent Fredric, स्रोत

इंटरनेट पर सबसे बड़ी पूंजी विफलताओं में से एक जावास्क्रिप्ट में एक साथ स्ट्रिंग्स ग्लिंग करके एचटीएमएल बना रहा है।

var mya = document.createElement("a");
mya.href="#"; 
mya.onclick = function(){ 
    StepTwo(function(){ 
        TestFunction('123', false ); 
    }, true );   
};
newDiv.innerHTML = ""; 
newDiv.appendChild(mya);

यह किसी भी फैंसी से बचने की चीजों की आवश्यकता को समाप्त करता है।

(मुझे शायद अलग-अलग 'ऑनक्लिक' करना चाहिए, लेकिन यह काम करना चाहिए, मैं कड़ी मेहनत कर रहा हूं कि सब कुछ करने के लिए सिर्फ jQuery कोड का उपयोग न करें)

यह है कि मैं इसे jQuery में कैसे करूंगा:

jQuery(function($){ 

  var container = $("#container"); 
  var link = document.createElement("a"); /* faster than  $(""); */
  $(link).attr("href", "Something ( or # )" ); 
  $(link).click( function(){ 
       var doStepTwo = function()
       { 
            TestFunction('123', true ); 
       };
       StepTwo( doStepTwo, false );  /* StepTwo -> doStepTwo -> TestFunction() */
  });
  container.append(link); 
}); 

जावास्क्रिप्ट में एक साथ gluing तारों के लिए कोई अच्छा बहाना नहीं है

यह सब कुछ है <html> ADD वर्चुअल पार्सिंग में वापस एचटीएमएल पार्सिंग में ओवरहेड, और ADD XSS आधारित टूटी हुई HTML के लिए संभावित। यहां तक ​​कि प्यारे Google को अपनी कुछ विज्ञापन स्क्रिप्ट में यह गलत लगता है और मैंने देखा है कि कई मामलों में महाकाव्य विफलताओं का कारण बन गया है (और वे इसके बारे में जानना नहीं चाहते हैं)

I don't understand Javascript is the only excuse, and it's NOT a good one.

0
जोड़ा
एफवाईआई - स्ट्रिंग कॉन्सटेनेशन बहुत तेजी से एक बिल्ली है। 1000 पंक्तियों के साथ एक ग्रिड कहने के लिए उपयोगी।
जोड़ा लेखक Chase Seibert, स्रोत

You should be using " not " or \" inside an HTML string quoted with double-quotes.

NewDiv.innerHTML = "";

ऐसा करने का शायद एक बेहतर तरीका है - जब भी आप eval() का उपयोग करके स्वयं को पाते हैं तो आपको वापस खड़े रहना चाहिए और एक अलग समाधान की तलाश करनी चाहिए।

0
जोड़ा
दोबारा, एक ही समय में दूसरी जवाब। इच्छा है कि मैं चुने हुए सही उत्तर के रूप में दोनों को चिह्नित कर सकूं। 15+ प्रतिष्ठा होने के बाद कुछ वोट आपके रास्ते पर फेंक देंगे। सहायता करने के लिए समय निकालने के लिए धन्यवाद।
जोड़ा लेखक RekrowYnapmoc, स्रोत

आपकी सबसे बड़ी समस्या eval का उपयोग कर रही है, यह इतनी सारी संभावित समस्याओं का कारण बनती है कि वैकल्पिक समाधान खोजने के लिए यह हमेशा बेहतर होता है।

आपकी तत्काल समस्या यह है कि आपके पास वास्तव में क्या है


as the next " after the start of the onclick attribute, closes it. Use " as others have suggested. And don't use eval.

0
जोड़ा

The best way is to create the element with document.createElement, but if you're not willing to, I guess you could do or use ".

आपके कोड में:

newDiv.innerHTML = "";

यदि यह काम नहीं करता है, तो " \ '" को " \\' " में बदलने का प्रयास करें।

याद रखें कि "चरित्र का उपयोग HTML टैग पर विशेषता को खोलने और बंद करने के लिए किया जाता है। यदि आप इसे विशेषता के मान में उपयोग करते हैं, तो ब्राउज़र इसे करीबी चार के रूप में समझ जाएगा।

Example: <input type="text" value="foo"bar"> will end up being <input type="text" value="foo">.

0
जोड़ा

आप दावा करते हैं कि eval यहां करने के लिए सही बात है। मुझे बहुत ज़्यादा यकीन नहीं है।

क्या आपने यह दृष्टिकोण माना है:


और आपके StepTwo समारोह में

function StepTwo(func,args,flag){
    //do what ever you do with the flag
    //instead of eval use the function.apply to call the function.
    func.apply(args);
}
0
जोड़ा
फिर से धन्यवाद। सुरुचिपूर्ण। लेकिन हमारे ऐप के संदर्भ में eval सही है। (लॉल, इच्छा है कि मैं अपने मूल पोस्ट में eval के बारे में एक अस्वीकरण डाल दिया!)। वैसे भी बहुत बहुत धन्यवाद। :-)। यदि StepTwo वर्तमान में जो कुछ भी कर रहा है उससे अलग कुछ भी कर रहा था, तो मैं eval से बचने के लिए।
जोड़ा लेखक RekrowYnapmoc, स्रोत
अरे, मुझे खेद है लेकिन मुझे कहने की अनुमति नहीं है। मैं काम से कोड चिपकाऊंगा जो तकनीकी रूप से उस कंपनी से संबंधित है जिसे मैं लिख रहा हूं। मुझे यकीन है कि ज्यादा झगड़ा नहीं होगा लेकिन मैं सुरक्षित पक्ष पर रहूंगा। उम्मीद है आप समझ गए होंगे।
जोड़ा लेखक RekrowYnapmoc, स्रोत
मेरा जवाब न केवल आपके लिए है। यह उन सभी के लिए भी है जो समान मुद्दों के उत्तर खोजते हैं। उन लोगों के लिए संभवतः सही समाधान नहीं है। हालांकि आप मुझे उत्सुक मिला। इवल सही क्यों है इसका मुख्य कारण क्या है?
जोड़ा लेखक Gene, स्रोत
अरे हाँ। मैं कभी भी अपने काम के किसी भी वास्तविक उदाहरण का उपयोग नहीं कर सकता।
जोड़ा लेखक Gene, स्रोत

आप एक तत्व बना सकते हैं और डीओएम विधि का उपयोग कर क्लिक ईवेंट से संलग्न कर सकते हैं।

एक जावास्क्रिप्ट फ्रेमवर्क (सर्वव्यापी jQuery की तरह) यह बहुत आसान बना देगा।

0
जोड़ा
0
जोड़ा

मुझे पता है कि यह हेला 'पुराना है, लेकिन अगर किसी को eval (और आपको बिल्कुल eval का उपयोग करना है) का उपयोग करते हुए बच निकले स्ट्रिंग्स के साथ समस्याएं हैं, तो मुझे समस्याओं से बचने का एक तरीका मिला है।

var html = '';
eval('(function(div, html){div.innerHTML = html;})')(newDiv, html);

तो, यहाँ क्या चल रहा है?

  1. eval creates a function that contains two parameters, div and html and returns it.
  2. The function is immediately run with the parameters to the right of the eval function. This is basically like an IIFE.

इस मामले में

var myNewMethod = eval('(function(div, html){div.innerHTML = html;})');

मूल रूप से वही है:

var myNewMethod = function(div, html){div.innerHTML = html;}

और फिर हम यह कर रहे हैं:

myNewMethod(newDiv, html); //where html had the string containing markup

मैं सुझाव देना चाहता हूं कि eval का उपयोग न करें। यदि इसे टाला नहीं जा सकता है, या यदि आप सभी इनपुट को नियंत्रित करते हैं और इंजेक्शन का कोई खतरा नहीं है तो यह उन मामलों में मदद करेगा जहां स्ट्रिंग से बच निकलती है।

मैं फ़ंक्शन का भी उपयोग करता हूं, लेकिन यह अब और सुरक्षित नहीं है। यहां स्निपेट का उपयोग किया गया है:

    var feval = function(code) {
    return (new Function(code))();
}
0
जोड़ा