Nie ma bezpośredniego sposobu, aby to zrobić.
Jest to zwykle zadanie po stronie serwera: serwer dba o wygenerowanie wymaganego kodu HTML.
Komponenty WWW są po stronie klienta, więc działają na to, co zostało już dostarczone do przeglądarki.
Skrypty są wykonywane za każdym razem, gdy zmienia się plik w projekcie, dzięki czemu można rozszerzyć skrypt, aby uzyskać to, co chcesz. Nie sądzę, że to dobre podejście, ale rozwiązuje twój problem.
Najpierw dodaj następującą zastępczy do docelowego pliku html (w moim przypadku web/webuitest.html
):
<header></header>
teraz dodać plik header.html
do projektu z niektórych treści:
THIS IS A HEADER
Teraz przedłużyć build.dart
skrypt, więc sprawdzi, czy zmieniono header.html
, a jeśli tak, zaktualizuje webuitest.html
:
// if build.dart arguments contain header.html in the list of changed files
if (new Options().arguments.contains('--changed=web/header.html')) {
// read the target file
var content = new File('web/webuitest.html').readAsStringSync();
// read the header
var hdr = new File('web/header.html').readAsStringSync();
// now replace the placeholder with the header
// NOTE: use (.|[\r\n])* to match the newline, as multiLine switch doesn't work as I expect
content = content.replaceAll(
new RegExp("<header>(.|[\r\n])*</header>", multiLine:true),
'<header>${hdr}</header>');
// rewrite the target file with modified content
new File('web/webuitest.html').writeAsStringSync(content);
}
Jedną z konsekwencji tego podejścia jest to, że przepisanie celu spowoduje ponowne wywołanie build.dart
, więc pliki wyjściowe zostaną zbudowane dwa razy, ale to nie jest duży problem.
Oczywiście może to być znacznie lepsze, a ktoś może nawet umieścić go w bibliotece.
Niezbyt ładne, ale działa. Dzięki. – JJJ
prawda, to brzydkie jak diabli :) Właściwie myślałem o zbudowaniu biblioteki do tego, ale postanowiłem tego nie robić, ponieważ nie jest to coś, co chciałbym często zobaczyć. –
@Juhana, BTW, początkowo myślałem o przepisywaniu tylko plików z katalogu 'out', ale edytor także monitoruje te pliki (chyba jest zgłoszony błąd), więc uruchamia nieskończoną pętlę przebudowy –