JavaScript dispose-t-il d'un mécanisme permettant de déterminer le numéro de ligne de l'instruction en cours d'exécution (et si oui, quel est-il) ?
Réponse
Trop de publicités?Si votre code est composé de JavaScript et de PHP, le numéro de ligne PHP actuel est disponible en JavaScript sous forme de constante littérale, parce qu'il est disponible en PHP sous forme de <?= __LINE__ ?>
(En supposant que les balises courtes de PHP soient activées, évidemment).
Ainsi, par exemple, en JavaScript, vous pouvez dire :
this_php_line_number = <?= __LINE__ ?>;
Cependant, si vous ne faites pas attention, le numéro de ligne PHP peut être différent du numéro de ligne JavaScript, car PHP "mange" les lignes de source avant que le navigateur ne les voie. Le problème est donc de s'assurer que les numéros de ligne PHP et JavaScript sont identiques. S'ils sont différents, l'utilisation du débogueur JavaScript du navigateur devient beaucoup moins agréable.
Vous pouvez vous assurer que les numéros de ligne sont identiques en incluant une instruction PHP qui écrit le nombre correct de nouvelles lignes nécessaires pour synchroniser les numéros de ligne côté serveur (PHP) et côté navigateur (JavaScript).
Voici à quoi ressemble mon code :
<!DOCTYPE html>
<html lang="en">
<!-- Copyright 2016, 2017, me and my web site -->
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, user-scalable=yes">
<?php
...lots of PHP stuff here, including all PHP function definitions ...
echo str_repeat("\n",__LINE__-6); # Synchronize PHP and JavaScript line numbers
?>
<!-- *** this is line <?php echo __LINE__ . ' of ' . basename(__FILE__); ?> *** -->
<title>My web page title</title>
...lots of HTML and JavaScript stuff here...
</body>
</html>
<!-- *** this is line <?php echo __LINE__ . ' of ' . basename(__FILE__); ?> *** -->
La clé réside dans cette déclaration de PHP :
echo str_repeat("\n",__LINE__-6);
Cela produit suffisamment de nouvelles lignes pour que le numéro de ligne vu par JavaScript soit le même que le numéro de ligne de PHP. Toutes les définitions de fonctions PHP, etc. sont en haut, avant cette ligne.
Après cette ligne, je limite mon utilisation de PHP au code qui ne modifie pas les numéros de ligne.
Le "-6" tient compte du fait que mon code PHP commence à la ligne 8. Si vous commencez votre code PHP plus tôt, vous réduirez ce nombre. Certaines personnes placent leur code PHP tout en haut de la page, avant même le DOCTYPE.
(La ligne meta viewport désactive le "font boosting" d'Android Chrome selon cette Q&R de Stack Overflow : Chrome sur Android redimensionne la police . Il s'agit d'un modèle standard, dont chaque page web a besoin).
La ligne suivante sert à vérifier que je n'ai pas fait d'erreur. Vue dans le débogueur du navigateur, ou par un clic droit / enregistrer la page web, elle devient un commentaire HTML qui indique le nom du fichier source et le numéro de ligne corrects :
<!-- *** this is line <?php echo __LINE__ . ' of ' . basename(__FILE__); ?> *** -->
devient :
<!-- *** this is line 1234 of my_file.php *** -->
Désormais, chaque fois que je vois un numéro de ligne, que ce soit dans un message d'erreur ou dans le débogueur JavaScript, il est correct. Les numéros de ligne PHP et les numéros de ligne JavaScript sont toujours cohérents et identiques.
- Réponses précédentes
- Plus de réponses
0 votes
Duplicata possible de Comment obtenir le numéro de ligne de la fonction de l'appelant JavaScript ? Comment obtenir l'URL source de l'appelant JavaScript ?