Heim  >  Artikel  >  Web-Frontend  >  JavaScript-Methode zum Implementieren eines Rückrufs zum Durchqueren von Webseiten-Unterseiten (einschließlich window.frames, rekursiver Funktionen, Funktionskontext)_Javascript-Kenntnisse

JavaScript-Methode zum Implementieren eines Rückrufs zum Durchqueren von Webseiten-Unterseiten (einschließlich window.frames, rekursiver Funktionen, Funktionskontext)_Javascript-Kenntnisse

WBOY
WBOYOriginal
2016-05-16 15:48:411830Durchsuche

Das Beispiel in diesem Artikel beschreibt, wie JavaScript Rückrufe zum Durchlaufen von Webseiten-Unterseiten implementiert (einschließlich window.frames, rekursiver Funktionen und Funktionskontext). Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Es wurde aus einem von mir selbst geschriebenen reinen JavaScript-Toolprogramm extrahiert und wird zum Durchlaufen aller Unterseiten der aktuellen Webseite und zum Ausführen iterativer Rückrufe verwendet. Der Rückgabewert der Rückruffunktion kann zur Ergebnisrückgabe verwendet werden, was dazu beiträgt Abschlussvariablen reduzieren~

Sein Merkmal ist, dass beim rekursiven Durchlaufen nur das Window-Objekt der Unterseite abgerufen wird und die Rückruffunktion nicht sofort ausgeführt wird, sondern nach Abschluss des Abrufs in der normalen Schleifenstruktur zurückgerufen wird. Dies kann den Speicherverbrauch bei rekursiven Aufrufen minimieren, die Programmstruktur vereinfachen und die Wartung vereinfachen

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

Anwendungsbeispiel:

// 无参数 —— 返回一个数组,包含函数调用所在的 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!';

Ich hoffe, dass dieser Artikel für das JavaScript-Programmierdesign aller hilfreich sein wird.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn