Maison > interface Web > js tutoriel > le corps du texte

Méthode JavaScript pour implémenter le rappel de traversée de sous-page de page Web (impliquant window.frames, fonctions récursives, contexte de fonction)_compétences javascript

WBOY
Libérer: 2016-05-16 15:48:41
original
1828 Les gens l'ont consulté

L'exemple de cet article décrit comment JavaScript implémente les rappels de parcours de sous-pages de pages Web (impliquant window.frames, les fonctions récursives et le contexte de fonction). Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants :

Extrait d'un programme outil JavaScript pur écrit par moi-même, il est utilisé pour parcourir toutes les sous-pages de la page Web actuelle et exécuter des rappels itératifs, et la valeur de retour de la fonction de rappel peut être utilisée pour le retour du résultat, aidant à réduire les variables de fermeture~

Sa caractéristique est que - seul l'objet Window de la sous-page est récupéré lors du parcours récursif, et la fonction de rappel n'est pas exécutée immédiatement, mais est rappelée dans la structure de boucle ordinaire une fois la récupération terminée. Cela peut minimiser la consommation de mémoire lors des appels récursifs, simplifier la structure du programme et faciliter sa maintenance

Fonction globale Frame_Each( CallBack ) :

(function (BOM) {
  function All_Frames(iWindow) {
    var _Frames_ = [].slice.call(iWindow.frames, 0);
    for (var i = 0; i < _Frames_.length; i++)
      _Frames_ = _Frames_.concat( arguments.callee(_Frames_[i]) );
    return _Frames_;
  }
  BOM.Frame_Each = function (CallBack) {
    var Frames = [this].concat( All_Frames(this) );
    if (! CallBack) return Frames;
    for (var i = 0, CBR; i < Frames.length; i++) {
      try { Frames[i].name; } catch (iError) { continue; }
      CBR = CallBack.apply(Frames[i], [].slice.call(arguments, 1));
      if (CBR === false) break;
      else if (CBR === undefined) continue;
      return CBR;
    }
  };
})(self);

Copier après la connexion

Exemple d'utilisation :

// 无参数 —— 返回一个数组,包含函数调用所在的 Window 对象及其子页面的 Window,其顺序同递归遍历
var Pages = Frame_Each();
console.log( Pages.length );
// 定义回调 —— 回调返回值功能与普通循环语句的对应:
//  1. undefined:continue
//  2. false:break
//  3. 其它任何值:break && return Value
var Search_Result = Frame_Each(function () {
  var iFocus = this.document.activeElement;
  switch ( iFocus.tagName.toLowerCase() ) {
    case 'body':   return false;
    case 'iframe':  return;
  }
  return iFocus;
});
Search_Result.innerHTML = 'Hello, Focus!';

Copier après la connexion

J'espère que cet article sera utile à la conception de la programmation JavaScript de chacun.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!