2012-12-23 13 views

Odpowiedz

5

Co szukasz jest nazywany funkcja:

function x() { 
    console.log('Alive!'); 
} 

Jeśli x jest już ciąg zawierający kod można użyć eval(x), aby go wykonać. eval jest jednak zły.

10

To, czego szukasz, to: eval(). Przekazując ciąg znaków do tej funkcji, ocenisz ciąg jako kod JavaScript i zwróci on jakąkolwiek wartość zwracaną, którą zwróci kod w ciągu znaków.

Należy jednak pamiętać, że podczas korzystania z tej funkcji. Nie chcesz oceniać, że kod, którego nie znasz, jest bezpieczny do wykonania. Na przykład uruchomienie generowanego przez użytkownika kodu może zepsuć wszystko, co robisz. Korzystanie z tego w JavaScript na stronie internetowej prawdopodobnie spowoduje tylko problemy po stronie klienta, a więc prawdopodobnie nie będzie dużym zagrożeniem bezpieczeństwa, chciałbyś być bardzo ostrożny przy ocenie kodu na przykład po stronie serwera.

Jak już wspomniano w innych postach, prawdopodobnie chcesz utworzyć funkcję zamiast wycenionego ciągu, jeśli kontrolujesz kod źródłowy, który ma zostać uruchomiony.

+0

dziękuję wszystkim za twoje odpowiedzi, tego właśnie szukałem. Problem polega na tym, że Im wykonuje zawartość skryptu, który używa document.write i zastępuje całą stronę internetową. jak mogę obejść to i po prostu mieć elementy dołączone do dokumentu HTML i nie całkowicie nadpisać wszystko inne? zgaduje, że to zupełnie inny topi, ale dzięki za pomoc odzyskanie eval pytanie, które miałem! –

+0

Tak, to jest całkiem nowy temat, ale tutaj jest krótkie wyjaśnienie twojego problemu: 'document.write' zawsze wyczyści stronę i utworzy nową po uruchomieniu po całkowitym załadowaniu dokumentu. Tym samym należy użyć 'innerHTML'. Pobierz element, do którego chcesz edytować zawartość za pomocą czegoś w stylu 'document.getElementById()' i wykonaj 'element.innerHTML =" output ". –

+0

@AndreasHagen: Jeśli nie ma węzłów DOM na stronie, to 'document.writeln' zapisuje pojedynczą linię, bez usuwania całej strony –

10

eval() Spowoduje to konwersję ciągu znaków na kod javascript.

eval("console.log('Alive!')";); 
Powiązane problemy