Frage Meteor.js:

Ein einfaches Skript-Tag innerhalb des Body-Tags scheint nicht zu funktionieren. Die Warnung wird im folgenden Code nicht ausgelöst:

<body>
   <script type="text/javascript">
      alert('Hello');
   </script>

      {{>main}}

</body>

Irgendeine Idee warum?

Bearbeiten: Probieren Sie es einfach mit einer frischen Meteor App aus, noch kein Alert-Tag:

<head>
  <title>test</title>
</head>

<body>

  <script type="text/javascript">
     alert('Hello');
  </script>

  {{> hello}}
</body>

<template name="hello">
  <h1>Hello World!</h1>
  {{greeting}}
  <input type="button" value="Click" />
</template>

Merkwürdige Sache ist, wenn ich kopiere die Quelle des HTML, machte eine neue HTML-Seite, und die Warnung wird funktionieren.

Edit3: Ich habe diese App hier bereitgestellt: http://alert-in-body-test.meteor.com/  Bekommst du eine Alarmbox?


7
2017-08-28 08:05


Ursprung


Antworten:


Diese Frage ist in der aktuellen Version von Meteor (Version 0.5.4) immer noch relevant, also wollte ich beschreiben, wie man Skript am Ende des Körpers einfügt.

Um JavaScript am Ende des Körpers auszuführen, registrieren Sie einen Handlebars-Helfer und geben Sie den entsprechenden Code wie folgt ein:

In client.html:

<body>
  {{renderPage}}

  {{afterBody}}
</body>

...

In client.js:

if (typeof Handlebars !== 'undefined') {
  Handlebars.registerHelper('afterBody', function(name, options) {
    $('body').append('AFTER BODY');
  });
}

(Eine ausführliche Beschreibung, warum dies erforderlich ist, finden Sie in Rahuls Antwort auf eine ähnliche Frage: https://stackoverflow.com/a/14002991/219238 )


3
2018-01-11 21:33



Es funktioniert für mich

in onrender nennen Sie diese jquery

$ .getScript ('deine URL')


1
2018-05-03 04:36



Es sollte funktionieren.

Ich habe es gerade in eines meiner Projekte eingefügt und es hat funktioniert.

Ihr {{> main}} ist seltsam für mich hart. Stellen Sie auch sicher, dass <body> ist drinnen <html> Etikett.


0
2017-08-28 08:19



Meteor konstruiert das gesamte DOM aus Javascript, indem es Ihre Seite als Vorlage darstellt - die "Quelle" für Ihre Seite, wie sie vom Browser gesehen wird, ist im Grunde:

 <script type="text/javascript" src="/5a8a37bef5095c69bcd3844caf3532e1ba6d49bf.js"></script>

Ich kann keine definitive Seite finden, die besagt, dass das Einbetten eines Skript-Tags in eine Vorlage nicht dazu führt, dass es ausgeführt wird, aber es fühlt sich definitiv gegen den Geist dessen an, was der Rahmen zu erreichen versucht.

Wenn es darum geht, eine saubere Trennung von Markup und Logik zu erreichen, dann legen Sie sie in die Vorlage. Eine bessere Lösung wäre die Verwendung der meteor.startup Anruf


0
2017-08-29 02:31



Anstatt den gerenderten HTML-Code bei Entwicklertools zu suchen, sollten Sie versuchen, den tatsächlich heruntergeladenen HTML-Code zu suchen. Sie werden ein (wahrscheinlich) leeres Tag finden, mit Tonnen von Script - Tags in der.

Mit anderen Worten, der Körper Ihrer Meteor-Anwendung ist nicht der Körper des endgültigen HTML, es ist nur Ihre Hauptvorlage.

Stattdessen wird diese Tonne von Skripten, die von Meteor geliefert werden, Ihre Vorlagen laden. Ihr Code wird also nicht ausgeführt, da er dort platziert wurde. Es ist, als wenn Sie DOM manipulieren (zum Beispiel mit jQuery), indem Sie ein Skript-Tag in DOM platzieren, nachdem es geladen wurde. Dieses Skript-Tag wird nicht ausgeführt.


0
2018-01-04 01:50