Inclure facilement du contenu venant de notre serveur en copiant un fragment de code.
<!doctype html><meta charset="utf-8">
<style>
body { font-family: "Comic Sans MS"; color: purple; }
iframe { width: 100%; }
</style>
<p>Contenu de la page hôte</p>
<iframe src="iframe_content.html"></iframe>
<p>Suite du contenu de la page hôte</p>
Problème : la hauteur de l'iframe ne s'adapte pas au contenu.
Problème : le contenu ne peut pas sortir du cadre.
Pose problème pour :
Dans la page hôte :
<p>Contenu de la page hôte</p>
<div id="iframe-wrapper"></div>
<p>Suite du contenu de la page hôte</p>
<script src="pym.js"></script>
<script>
new pym.Parent('iframe-wrapper', 'iframe_content', {});
</script>
Dans la page invitée :
<script src="pym.js"></script>
<script>
new pym.Child();
</script>
Le problème de hauteur de l'iframe est résolu.
Mais on ne peut toujours pas sortir de l'iframe.
Page hôte :
<div class="toulousejs-widget-container"></div>
<!-- ... bla bla ... -->
<script src="http://example.com/widget.js"></script>
Notre script widget.js :
(function() {
var container = document.getElementById("toulousejs-widget-container");
container.innerHTML = "Le contenu provenant de notre serveur";
})();
Avantages :
<script>
en fin de pageInconvénients :
Page hôte :
<p>Contenu de la page hôte</p>
<script async src="http://example.com/widget.js"
data-toulouse-js-id="42">
</script>
<p>Suite du contenu de la page hôte</p>
Notre script :
(function() {
var script = document.querySelector("script[data-toulouse-js-id]");
var content =
"Contenu issu de notre script. " +
"Paramètre : " + script.getAttribute("data-toulouse-js-id");
script.insertAdjacentHTML("beforebegin", content);
})();
<script>
window.ToulouseJSWidget_ready = function() {
ToulouseJSWidget.init({
param1: "foo", param2: "bar"
});
ToulouseJSWidget.doSomething();
};
(function() {
var script = document.createElement('script');
script.async = true;
script.src = 'http://example.com/widget.js';
var entry = document.getElementsByTagName('script')[0];
entry.parentNode.insertBefore(script, entry);
})();
</script>
Note : la création dynamique d'élément <script>
permet le chargement asynchrone avec les vieux navigateurs
function loadScript(url, callback) {
if(typeof callback === "undefined") { callback = function() {}; }
var scriptTag = document.createElement('script');
scriptTag.setAttribute("type", "text/javascript");
scriptTag.setAttribute("src", url);
if (scriptTag.readyState) {
// Pour les vieux IE
scriptTag.onreadystatechange = function () {
if (this.readyState === 'complete' || this.readyState === 'loaded') {
callback();
}
};
} else {
scriptTag.onload = callback;
}
document.documentElement.appendChild(scriptTag);
}
loadScript("http://example.com/jquery.js", function() {
var $;
// On rétabli window.$ et window.jQuery tels qu'ils étaient
// auparavant et on garde des références à notre propre version
window.$ToulouseJSWidget_jQuery = $ = window.jQuery.noConflict(true);
continueWithTheRestOfTheCode($);
});
window.nomDeMonOrganisationNomDuProjetFoo
."use strict";
pour ne pas introduire de variables globales par erreur (vérification de la présence du mot clé var
)La Same Origin Policy
<div id="container"></div>
<script src="jquery-1.11.2.js"></script>
<script>
$("#container").load("http://localhost:8080/content.txt");
</script>
Firefox :
Chrome :
Le chargement de script n'est pas soumis à la Same Origin Policy.
Le client définit une fonction :
function foo(data) {
// faire quelque chose avec data
}
et charge un script depuis le serveur tiers :
<script src="http://example.com/script.js"></script>
Le script fourni par le serveur tiers appelle la fonction définie par le client :
foo({toto: 42, baz: "quux"});
var fs = require('fs'), http = require('http');
http.createServer(function (req, res) {
fs.readFile(__dirname + req.url, function (err,data) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.writeHead(200);
res.end(data);
});
}).listen(8080);
<div id="container"></div>
<script src="jquery-1.11.2.js"></script>
<script>
$("#container").load("http://localhost:8080/content.txt");
</script>
function loadCss(url) {
var link = $("<link>", {rel: "stylesheet", href: url});
link.appendTo($(document));
}
<style>
qui précède le HTML.toulousejs-widget-container {
// Import de bootstrap.css avec prefix
@import (less) "src/lib/bootstrap/bootstrap.css";
// Idem pour select2
@import (less) "src/lib/select2/select2.css";
@import (less) "src/lib/select2-bootstrap.css";
@import "src/lib/bootstrap/variables.less";
// Reste de nos styles
.foo-bar {
text-align: left;
}
// ...
}
Plus d'info :
Les slides : http://alexmarandon.com/slides/javascript-invite/
Des questions ?
Table of Contents | t |
---|---|
Exposé | ESC |
Full screen slides | e |
Presenter View | p |
Source Files | s |
Slide Numbers | n |
Toggle screen blanking | b |
Show/hide slide context | c |
Notes | 2 |
Help | h |