Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Jegyzet
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Figyelmeztetés
A ASP.NET Core ezen verziója már nem támogatott. További információ: .NET és .NET Core támogatási szabályzat. Az aktuális kiadáshoz tekintse meg a jelen cikk .NET 9-es verzióját .
Töltse be a JavaScript (JS) kódot az alábbi módszerek bármelyikével:
Beágyazott JavaScript nem ajánlott Blazor alkalmazásokhoz. Javasoljuk, hogy JS elrendezést kombináljon a JS modulokkal.
<script> címkék helye
Csak akkor helyezzen <script> címkét egy összetevőfájlba (.razor), ha az összetevő garantáltan statikus kiszolgálóoldali renderelést (statikus SSR) alkalmaz továbbfejlesztett navigáció nélkül. Ha <script> címkét helyez el egy összetevőfájlban, az nem okoz fordítási időt jelző figyelmeztetést vagy hibát, de előfordulhat, hogy a szkriptbetöltési viselkedés nem felel meg az interaktív renderelési módot vagy statikus SSR-t továbbfejlesztett navigációval használó összetevőkre vonatkozó elvárásainak.
Ne helyezzen <script> címkét egy összetevőfájlba (.razor), mert a <script> címke nem frissíthető dinamikusan. Ha egy <script> címkét helyez el egy összetevőfájlban, fordítási időben jelentkező hibát okoz.
Jegyzet
A dokumentációs példák általában egy <script> címkébe helyezik a szkripteket, vagy külső fájlokból töltik be a globális szkripteket. Ezek a megközelítések globális függvényekkel szennyezi az ügyfelet. Éles alkalmazások esetén javasoljuk, hogy külön JS helyezze el a JS-t, amelyeket szükség esetén importálhat. További információ: JavaScript-elkülönítés a JavaScript-modulokban szakaszban.
Jegyzet
A dokumentációs példák szkripteket helyeznek egy <script> címkébe, vagy betöltik a globális szkripteket külső fájlokból. Ezek a megközelítések globális függvényekkel szennyezi az ügyfelet. A .NET 5-nél korábbi verziók JS támogatják JS a külön modulokba való elhelyezéstBlazor, amelyek szükség esetén importálhatók. Ha az alkalmazás elkülönítés céljából JS modulokat JS igényel, javasoljuk, hogy az alkalmazást .NET 5 vagy újabb verzióval készítse el. További információkért használja a Verzió legördülő listát a cikk .NET 5-ös vagy újabb verziójának kiválasztásához, és tekintse meg a JavaScript-elkülönítést a JavaScript-modulok szakaszában .
Szkript betöltése <head> jelölőnyelvben
Az ebben a szakaszban ismertetett megközelítés általában nem ajánlott.
Helyezze a JavaScript (JS) címkéket (<script>...</script>) a <head> elem jelölésébe ():
<head>
...
<script>
window.jsMethod = (methodParameter) => {
...
};
</script>
</head>
A JS<head>-ból való betöltése nem a legjobb módszer az alábbi okokból:
-
JS interop meghiúsulhat, ha a szkript attól függ, hogy Blazorelérhető-e. Azt javasoljuk, hogy a szkripteket a többi módszer egyikével töltse be, ne a
<head>korrektúra használatával. - A lap lassabban válhat interaktívvá a szkript JS elemzéséhez szükséges idő miatt.
Az összetevőjelölés esetében a szkriptek egy HeadContent összetevőn keresztül tölthetők be, a szokásos figyelmeztetéssel, hogy a módszer lelassítja a kliens oldal betöltését, ezért javasoljuk annak elkerülését. Ha egy szkript HeadContent összetevővel töltődik be egy Blazor Server alkalmazásban, Blazor WebAssembly alkalmazásban vagy olyan Blazor Web App-ban, amely interaktív renderelési módot (interaktív SSR, CSR) vagy továbbfejlesztett navigációval rendelkező statikus SSR-t használ, az összetevő oldalának elhagyásakor a <script> címke eltávolításra kerül a renderelt <head> tartalomból, de a szkript JavaScript-kódja nem töltődik ki, beleértve az eseménykezelőket, amelyeket a szkript regisztrál, a nyilvánosságra hozott változókat és a szkript által biztosított metódusokat. Csak a Blazor Web App-k, amelyek statikus SSR-t használnak továbbfejlesztett navigáció nélkül, oldják fel a JavaScript-kódot, amikor a felhasználó elnavigál az oldalról. Általában jobb, ha <script> címkéket ad hozzá a fizikai <head> tartalomhoz, kivéve, ha kifejezetten meg szeretné tartani az ilyen szkripthivatkozásokat az őket használó összetevőkben, és nem bánja, hogy a kód nem kerül eltávolításra a navigációs események során.
Az összetevőjelölés esetében a szkriptek egy HeadContent összetevőn keresztül tölthetők be, a szokásos figyelmeztetéssel, hogy a módszer lelassítja a kliens oldal betöltését, ezért javasoljuk annak elkerülését. Ha egy szkript HeadContent összetevővel van betöltve, az összetevő oldaláról lépve eltávolítja a <script> címkét a renderelt <head> tartalomból, de nem távolítja el a szkript JavaScript-kódját, beleértve a szkript által regisztrált eseménykezelőket, a közzétett változókat és a szkript által biztosított metódusokat. Általában jobb, ha <script> címkéket ad hozzá a fizikai <head> tartalomhoz, kivéve, ha kifejezetten meg szeretné tartani az ilyen szkripthivatkozásokat az őket használó összetevőkben, és nem bánja, hogy a kód nem kerül eltávolításra a navigációs események során.
Szkript betöltése <body> jelölőnyelvben
Helyezze a JavaScript-címkéket (<script>...</script>) a záró </body> elembe a Blazor szkripthivatkozás után:
<body>
...
<script src="{BLAZOR SCRIPT}"></script>
<script>
window.jsMethod = (methodParameter) => {
...
};
</script>
</body>
Az előző példában a {BLAZOR SCRIPT} helyőrző a Blazor szkript elérési útja és fájlneve. A szkript helyéről lásd: ASP.NET Core Blazor projektstruktúra.
Szkript betöltése egy külső JavaScript fájlból (.js), egy komponenshez társítva
A JavaScript-fájlok (JS) összetevők (Razor) számára történő együtt elhelyezése kényelmes módszer a szkriptek alkalmazásbeli rendszerezésére.
Razor
Blazor-alkalmazások összetevői a JS kiterjesztést használva helyezik el a .razor.js fájlokat, amelyek nyilvánosan elérhetők a projekt fájljának útvonalán keresztül.
{PATH}/{COMPONENT}.razor.js
- A
{PATH}helyőrző az összetevő elérési útja. - A
{COMPONENT}helyőrző az összetevő.
Az alkalmazás közzétételekor a keretrendszer automatikusan áthelyezi a szkriptet a webgyökérbe. A szkriptek átkerülnek a bin/Release/{TARGET FRAMEWORK MONIKER}/publish/wwwroot/{PATH}/{COMPONENT}.razor.js-ba, ahol a következő helyőrzők találhatók:
-
{TARGET FRAMEWORK MONIKER}a célkeretrendszer moniker (TFM). -
{PATH}az összetevő elérési útja. -
{COMPONENT}az összetevő neve.
Nincs szükség a szkript relatív URL-címének módosítására, mivel a Blazor automatikusan gondoskodik róla, hogy a JS fájl bekerüljön a közzétett statikus eszközök közé.
Ez a szakasz és a következő példák elsősorban a JS fájlelhelyezés magyarázatára összpontosítanak. Az első példa bemutat egy együtt működő JS fájlt egy szokásos JS függvénnyel. A második példa egy modul függvény betöltésére való használatát mutatja be, amely a legtöbb éles alkalmazás esetében ajánlott módszer. A .NET-ből való
Az alábbi JsCollocation1 összetevő betölt egy szkriptet egy HeadContent összetevőn keresztül, és meghív egy JS függvényt IJSRuntime.InvokeAsync. A {PATH} helyőrző az összetevő elérési útja.
Fontos
Ha a következő kódot használja egy tesztalkalmazás bemutatójára, módosítsa a {PATH} helyőrzőt az összetevő elérési útjára (például: .NET 8-ban vagy újabb verzióban Components/Pages vagy a .NET 7-ben vagy korábbi verziókban Pages). Egy Blazor Web App (.NET 8 vagy újabb verzió) az összetevőhöz az alkalmazásra vagy az összetevő definícióra globálisan alkalmazott interaktív renderelési mód szükséges.
Adja hozzá a következő szkriptet a Blazor szkript után (a Blazor indítási szkript helyét):
<script src="{PATH}/JsCollocation1.razor.js"></script>
JsCollocation1 összetevő ({PATH}/JsCollocation1.razor):
@page "/js-collocation-1"
@inject IJSRuntime JS
<PageTitle>JS Collocation 1</PageTitle>
<h1>JS Collocation Example 1</h1>
<button @onclick="ShowPrompt">Call showPrompt1</button>
@if (!string.IsNullOrEmpty(result))
{
<p>
Hello @result!
</p>
}
@code {
private string? result;
public async Task ShowPrompt()
{
result = await JS.InvokeAsync<string>(
"showPrompt1", "What's your name?");
StateHasChanged();
}
}
Az csoportosított JS fájl a JsCollocation1 összetevőfájl mellett található, és a fájl neve JsCollocation1.razor.js. Az JsCollocation1 összetevőben a szkript az csoportosított fájl elérési útjára hivatkozik. Az alábbi példában a showPrompt1 függvény elfogadja a felhasználó nevét egy Window prompt(), és visszaadja a JsCollocation1 összetevőnek megjelenítésre.
{PATH}/JsCollocation1.razor.js:
function showPrompt1(message) {
return prompt(message, 'Type your name here');
}
Az előző megközelítés nem ajánlott az éles alkalmazásokban való általános használathoz, mert a megközelítés globális függvényekkel szennyezi az ügyfelet. Az termelési alkalmazások jobb megközelítése a JS modulok használata. Ugyanezek az általános alapelvek vonatkoznak egy JS modul egy csoportosított JS fájlból való betöltésére, ahogyan azt a következő példa is mutatja.
Az alábbi JsCollocation2 összetevő OnAfterRenderAsync metódusa betölt egy JS modult a module-ba, amely az összetevő osztályának IJSObjectReference-je.
module a showPrompt2 függvény meghívására szolgál. A {PATH} helyőrző az összetevő elérési útja.
Fontos
Ha a következő kódot használja egy tesztalkalmazásban történő bemutatóhoz, módosítsa a {PATH} helyőrzőt az összetevő elérési útjára. Egy Blazor Web App (.NET 8 vagy újabb verzió) az összetevőhöz az alkalmazásra vagy az összetevő definícióra globálisan alkalmazott interaktív renderelési mód szükséges.
JsCollocation2 összetevő ({PATH}/JsCollocation2.razor):
@page "/js-collocation-2"
@implements IAsyncDisposable
@inject IJSRuntime JS
<PageTitle>JS Collocation 2</PageTitle>
<h1>JS Collocation Example 2</h1>
<button @onclick="ShowPrompt">Call showPrompt2</button>
@if (!string.IsNullOrEmpty(result))
{
<p>
Hello @result!
</p>
}
@code {
private IJSObjectReference? module;
private string? result;
protected async override Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
/*
Change the {PATH} placeholder in the next line to the path of
the collocated JS file in the app. Examples:
./Components/Pages/JsCollocation2.razor.js (.NET 8 or later)
./Pages/JsCollocation2.razor.js (.NET 7 or earlier)
*/
module = await JS.InvokeAsync<IJSObjectReference>("import",
"./{PATH}/JsCollocation2.razor.js");
}
}
public async Task ShowPrompt()
{
if (module is not null)
{
result = await module.InvokeAsync<string>(
"showPrompt2", "What's your name?");
StateHasChanged();
}
}
async ValueTask IAsyncDisposable.DisposeAsync()
{
if (module is not null)
{
try
{
await module.DisposeAsync();
}
catch (JSDisconnectedException)
{
}
}
}
}
Az előző példában JSDisconnectedException problémát okoz a modul eltávolítása során, ha BlazorSignalR áramköre elveszik. Ha az előző kódot egy Blazor WebAssembly alkalmazásban használják, nincs SignalR kapcsolat, amit elveszíthetne, így eltávolíthatja a try-catch blokkot, és meghagyhatja a sort, amely megsemmisíti a modult (await module.DisposeAsync();). További információ: ASP.NET Core Blazor JavaScript-együttműködés (JS interop).
{PATH}/JsCollocation2.razor.js:
export function showPrompt2(message) {
return prompt(message, 'Type your name here');
}
Fontos
Ne helyezzen <script>JsCollocation2.razor.js címkét a Blazor szkript után, mert a modul automatikusan betöltődik és gyorsítótárazódik a dinamikus import() meghívásakor.
A szkriptek és modulok használata a JS osztálykönyvtárban (RCL) lévő csoportosított Razor esetén csak BlazorJS interfészességen alapuló IJSRuntime interop mechanizmushoz támogatott. Ha a JavaScript [JSImport]/[JSExport] interop funkciót implementálja, tekintse meg a JavaScript JSImport/JSExport interop és ASP.NET Core lehetőségeit Blazor.
Az Razor osztálykódtár (RCL) által IJSRuntime-alapú JS interop használatával biztosított szkriptek vagy modulok esetében a következő elérési utat használja a rendszer:
./_content/{PACKAGE ID}/{PATH}/{COMPONENT}.{EXTENSION}.js
- Az aktuális könyvtár elérési útja (
./) szükséges a megfelelő statikus objektum elérési útjának létrehozásához a JS fájlhoz. - A
{PACKAGE ID}helyőrző az RCL csomagazonosítója (vagy az alkalmazás által hivatkozott osztálytár könyvtárneve). - A
{PATH}helyőrző az összetevő elérési útja. Ha egy Razor összetevő az RCL gyökerénél található, az elérésiút-szegmens nem lesz benne. - A
{COMPONENT}helyőrző az összetevő neve. - A
{EXTENSION}helyőrző megegyezik a komponens kiterjesztésével:razorvagycshtml.
Az alábbi Blazor alkalmazás példája:
- Az RCL csomagazonosítója
AppJS. - A modul szkriptjei be vannak töltve a
JsCollocation3összetevő (JsCollocation3.razor) számára. - A
JsCollocation3összetevő az RCLComponents/Pagesmappájában található.
module = await JS.InvokeAsync<IJSObjectReference>("import",
"./_content/AppJS/Components/Pages/JsCollocation3.razor.js");
További információ az RCL-ekről: ASP.NET Core Razor-összetevők felhasználása Razor osztálytárból (RCL).
Szkript betöltése külső JavaScript-fájlból (.js)
Helyezze a JavaScript (JS) címkéket (<script>...</script>), ahol a szkriptforrás (src) elérési útja van, a záró </body> elem belsejébe, a Blazor szkripthivatkozás után.
<body>
...
<script src="{BLAZOR SCRIPT}"></script>
<script src="{SCRIPT PATH AND FILE NAME (.js)}"></script>
</body>
Az előző példában szereplő helyőrzők esetében:
- A
{BLAZOR SCRIPT}helyőrző a Blazor szkript elérési útját és fájlnevét jelöli. A szkript helyéről lásd: ASP.NET Core Blazor projektstruktúra. - A
{SCRIPT PATH AND FILE NAME (.js)}helyőrző az elérési út és a szkriptfájl neve awwwrootalatt.
Az előző <script> címke alábbi példájában a scripts.js fájl az alkalmazás wwwroot/js mappájában található:
<script src="js/scripts.js"></script>
A szkripteket közvetlenül a wwwroot mappából is kiszolgálhatja, ha nem szeretné, hogy az összes szkript külön mappában maradjon a wwwrootalatt:
<script src="scripts.js"></script>
Ha a külső JS fájlt egy Razor osztálykönyvtár adja meg, adja meg a JS fájlt a statikus, stabil webes erőforrás elérési útjával: _content/{PACKAGE ID}/{SCRIPT PATH AND FILE NAME (.js)}.
- A
{PACKAGE ID}helyőrző a könyvtár csomagazonosítója. Ha a projektfájlban nincs megadva a<PackageId>, akkor a csomagazonosító alapértelmezés szerint a projekt összeállítás neve lesz. - A
{SCRIPT PATH AND FILE NAME (.js)}helyőrző awwwrootalatti elérési út és fájlnév.
<body>
...
<script src="{BLAZOR SCRIPT}"></script>
<script src="_content/{PACKAGE ID}/{SCRIPT PATH AND FILE NAME (.js)}"></script>
</body>
Az előző <script> címke alábbi példájában:
- A Razor osztálykönyvtár összeállítás neve
ComponentLibrary, és a könyvtár projektfájljában nincs megadva<PackageId>. - A
scripts.jsfájl az osztálytárwwwrootmappájában található.
<script src="_content/ComponentLibrary/scripts.js"></script>
További információért lásd: ASP.NET Core Razor összetevőinek felhasználása Razor osztálykönyvtárból (RCL).
Szkript beszúrása Blazor indítása előtt vagy után
Ha gondoskodni szeretne arról, hogy a szkriptek betöltődjenek Blazor indítása előtt vagy után, használjon JavaScript-inicializálót. További információkért és példákért lásd: ASP.NET Core Blazor indítás.
Szkript beillesztése Blazor elindítása után
Ha a Blazor indítása után szeretne szkriptet injektálni, akkor kapcsolódjon ahhoz a Promise-hez, amely a Blazormanuális indításából ered. További információért és példáért lásd: ASP.NET Core Blazor indítás.
JavaScript-elkülönítés JavaScript-modulokban
Blazor engedélyezi a JavaScript (JS) elkülönítését standard JS modulokban (ECMAScript specifikáció).
JS elkülönítés a következő előnyöket biztosítja:
- Az importált JS már nem szennyezi a globális névteret.
- A könyvtárak és összetevők felhasználóinak nem szükséges importálni a kapcsolódó JS-t.
Kiszolgálóoldali forgatókönyvekben mindig fogd el a JSDisconnectedException-t arra az esetre, ha a BlazorSignalR áramkörének meghibásodása megakadályozza, hogy egy JS interop hívás lezárja a modult, ami kezeletlen kivételt eredményez. Blazor WebAssembly alkalmazások nem használnak SignalR kapcsolatot JS interop során, így nincs szükség JSDisconnectedException megfogására a Blazor WebAssembly alkalmazásokban a modulok felszabadításához.
További információ: