Mam problemy z uruchomieniem tego. Najpierw próbowałem ustawić moje tagi skryptu jako ciągi, a następnie użyć jquery replaceWith (), aby dodać je do dokumentu po załadowaniu strony:
var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);
Ale dostałem literalne błędy w tej zmiennej. Następnie próbowałem zakodować ciąg w następujący sposób:
var a = '&left;script type="text/javascript">some script here<\/script>';
ale wysyłanie tego do replaceWith()
wyprowadza tylko ten ciąg do przeglądarki.
Czy ktoś może mi powiedzieć, jak byś się zajął dynamicznym dodawaniem <script>
tagu do przeglądarki po załadowaniu strony, najlepiej przez jQuery?
<script>
tag do dokumentu?eval()
funkcji. Ale użycieeval()
prawie zawsze sugeruje, że istnieje lepszy sposób na zrobienie tego, co próbujesz zrobić.document.write
i wywołasz go po załadowaniu strony, zniszczy stronę.<iframe>
elementach? Możesz odłożyć ustawianie<iframe>
adresu URL, aż będziesz gotowy.Odpowiedzi:
Możesz umieścić skrypt w osobnym pliku, a następnie użyć go
$.getScript
do załadowania i uruchomienia.Przykład:
źródło
$.getScript
po prostu załaduje plik .js przez AJAX i uruchomi go. Skrypt nie musi znajdować się w DOM, aby mieć dostęp do elementu DIV na Twojej stronie.$.getScript()
skrypt będzie musiał znajdować się w tej samej domenie lub zarówno zdalnej domenie, jak i przeglądarka będzie musiała obsługiwaćCORS
.$.ajax
uwagach: „Żądania skryptów i JSONP nie podlegają tym samym ograniczeniom zasad pochodzenia”. źródło . Innymi słowy,$.getScript
może pobierać pliki .js z innych domen, nie tylko z własnej .Spróbuj wykonać następujące czynności:
http://api.jquery.com/append
źródło
append
celu dodania skryptu. Dołączanie powoduje, że nawet skrypt wbudowany jest natychmiast oceniany (właśnie tego potrzebowałem). DziękiOto poprawny sposób na zrobienie tego z nowoczesnym (2014) JQuery:
lub jeśli naprawdę chcesz zamienić element div, możesz zrobić:
źródło
Prostszy sposób to:
Możesz również użyć tego formularza do załadowania css.
źródło
</script>
w swoim źródle, ponieważ może to powodować problemy z analizą: stackoverflow.com/questions/236073/ .../
$('head').append('<script src="your.js"><\/script>');
Ta odpowiedź jest technicznie podobna lub równa temu, na co odpowiedział jcoffland. Właśnie dodałem zapytanie, aby wykryć, czy skrypt już istnieje, czy nie. Potrzebuję tego, ponieważ pracuję w witrynie intranetowej z kilkoma modułami, z których niektóre udostępniają skrypty lub przynoszą własne, ale te skrypty nie muszą być ładowane za każdym razem. Używam tego fragmentu od ponad roku w środowisku produkcyjnym, działa jak urok. Komentując sobie: Tak, wiem, bardziej poprawne byłoby pytanie, czy funkcja istnieje ... :-)
źródło
Jest jedno obejście, które brzmi bardziej jak włamanie i zgadzam się, że nie jest to najbardziej elegancki sposób, ale działa w 100%:
Powiedz, że Twoja odpowiedź AJAX jest podobna do
Zauważ, że celowo pominąłem tag zamykający. Następnie w skrypcie, który ładuje powyższe, wykonaj następujące czynności:
Tylko nie pytaj mnie dlaczego :-) To jedna z tych rzeczy, do których doszedłem w wyniku desperackich, prawie przypadkowych prób i niepowodzeń.
Nie mam pełnych sugestii, jak to działa, ale co ciekawe, NIE zadziała, jeśli dodasz tag zamykający w jednej linii.
W takich chwilach mam wrażenie, że udało mi się podzielić przez zero.
źródło
<\/script>
byłby jednak ważnyPrzykład:
Powinno działać. Próbowałem tego; ten sam wynik. Ale kiedy użyłem tego:
To zadziałało dla mnie.
Edycja: zapomniałem
#someelement
(przy okazji mogę chcieć użyć z#someElement
powodu konwencji)Najważniejsze jest tutaj + =, więc kod HTML jest dodawany, a nie zastępowany.
Zostaw komentarz, jeśli to nie zadziałało. Chciałbym ci pomóc!
źródło
Oto znacznie jaśniejszy sposób - nie ma potrzeby korzystania z jQuery - który dodaje skrypt jako ostatnie dziecko
<body>
:Ale jeśli chcesz dodawać i ładować skrypty, użyj metody Rocket Hazmat .
źródło
Jeśli próbujesz uruchomić dynamicznie generowany JavaScript, byłoby nieco lepiej, gdybyś użył
eval
. Jednak JavaScript jest tak dynamicznym językiem, że naprawdę nie powinieneś tego potrzebować.Jeśli skrypt jest statyczny, najlepszym
getScript
rozwiązaniem jest sugestia Rocketa.źródło