Maison  >  Article  >  interface Web  >  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

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
WBOYoriginal
2016-05-16 15:48:411796parcourir

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);

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!';

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

Déclaration:
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