Rumah  >  Artikel  >  hujung hadapan web  >  Kaedah JavaScript untuk melaksanakan panggil balik traversal subhalaman halaman web (melibatkan window.frames, fungsi rekursif, konteks fungsi)_kemahiran javascript

Kaedah JavaScript untuk melaksanakan panggil balik traversal subhalaman halaman web (melibatkan window.frames, fungsi rekursif, konteks fungsi)_kemahiran javascript

WBOY
WBOYasal
2016-05-16 15:48:411796semak imbas

Contoh dalam artikel ini menerangkan cara JavaScript melaksanakan panggilan balik subhalaman halaman web (melibatkan window.frames, fungsi rekursif dan konteks fungsi). Kongsikan dengan semua orang untuk rujukan anda. Butirannya adalah seperti berikut:

Diekstrak daripada program alat JavaScript tulen yang ditulis oleh saya sendiri, ia digunakan untuk melintasi semua sub-halaman halaman web semasa dan melaksanakan panggilan balik berulang, dan nilai pulangan fungsi panggil balik boleh digunakan untuk pulangan hasil, membantu untuk kurangkan pembolehubah penutupan~

Cirinya ialah - hanya objek Tetingkap subhalaman yang diambil semasa traversal rekursif, dan fungsi panggil balik tidak dilaksanakan serta-merta, tetapi dipanggil semula dalam struktur gelung biasa selepas pengambilan selesai. Ini boleh meminimumkan penggunaan memori semasa panggilan rekursif, memudahkan struktur program dan memudahkan penyelenggaraan

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

Contoh penggunaan:

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

Saya harap artikel ini akan membantu reka bentuk pengaturcaraan JavaScript semua orang.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn