亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

如何實現Applet之間跨瀏覽器窗口的通信

2019-11-18 11:57:59
字體:
來源:轉載
供稿:網友

   java.applet包的AppletContext類包含如下兩個成員方法:getApplet和getApplets。使用這兩個方法,Applet能夠尋找到其他的Applet并調用它們的方法。不過這是以滿足如下安全條件為前提的:
  
  所有Applet位于同一服務器的同一目錄。
  所有Applet運行在同一頁面且位于同一瀏覽器窗口內。
   或許為Applet加上這些安全限制都有著很充分的理由,但第二個條件給我們實現帶有Applet到Applet通信功能的多Applet界面帶來了限制。
  
   請設想如下情形:
  
   你剛好編寫完了一個用于股票交易的Applet,接下來想要為它做一個完善的幫助系統。這個幫助系統也是一個Applet,而且應該放到和股票交易Applet不同的另外一個幀里。你作出這個決定的原因可能是出于網站整體結構的考慮,也可能是你想讓幫助系統總是處于顯示狀態。你還想讓幫助Applet能夠自動根據用戶的當前操作切換到相應的幫助條目(就象Microsoft Office幫助系統提供的那樣)。此外,你甚至還計劃著在幫助系統里做一個向導,使它能夠在另外一個窗口中指導用戶如何完成股票交易Applet里的各種任務。
  
   應當承認這種設想是非常美妙的。然而,由于這些Applet位于不同的頁面,AppletContext中的Java API無法幫助你完全實現這種設想——不過本文介紹的技術能夠。
  
   在介紹新的Applet到Applet通信方法之前,我們先要簡要地介紹一下getApplet和getApplets這兩個方法的用法。Applet能夠尋找到同一頁面的其他Applet,這既可以調用getApplet方法通過名字查找,也可以調用getApplets方法找出同一頁面內的所有Applet。這兩個方法都在調用成功時返回一個或多個Applet對象給調用者。調用者找到目標Applet對象之后,接著就可以調用它的公用方法。
  
   假設Html頁面的代碼片斷如下: 
  
  
  
   通過APPLET標記的name屬性,我們可以用如下代碼引用指定的Applet:
  Applet theOtherApplet = getApplet("app1");
  //調用該Applet的公用方法
  theOtherApplet.anyMethod();
  
  
  
  
   或者,我們也可以用下面的代碼提取頁面內的所有Applet:
  Enumeration allAppletsOnSamePage = getApplets();
  while(allAppletsOnSamePage.hasMoreElements()) {
    Applet appl = (Applet) allAppletsOnSamePage.nextElement();
  // 調用Applet的公用方法
    appl.anyMethod();
  }
  
  
  
  
   當發出調用的Applet提取到同一HTML頁面內的一個或多個Applet對象時,它就可以調用這些Applet對象的公用方法。
  
   遺憾的是,使用這種標準方法我們只能實現同一頁面內的Applet通信。但假如幸運的話,我們可以很方便地突破這一局限。實現跨頁面Applet到Applet通信基于這樣一個事實,即假如兩個Applet具有相同的codebase,那么即使它們運行在不同的瀏覽器窗口中,它們也將共享同一個運行時環境。所謂的codebase,我們可以粗略地把它看成Applet所在的服務器目錄,請參見本文后面參考資源中有關codebase示范的鏈接。
  
   共享運行時環境使得類的靜態域和結構能夠被所有的Applet實例訪問,因此,我們可以用這些靜態域和結構在不同的Applet之間傳遞信息。
  
   我們不僅可以把簡單數據類型——比如整數、字符、字符串存儲到這些靜態域,而且還可以存儲Applet實例本身的引用,這樣,其他的Applet就可以通過訪問這些靜態域得到該Applet實例的引用。
  
   這種方法非常復雜嗎?事實上,它并不復雜。下面我們來看一個簡單的例子。假設有兩個Applet(AppletA.class和AppletB.class)位于不同的幀,但它們具有相同的codebase。
  
   現在我們要從AppletA里面訪問AppletB的公用方法。首先我們要在AppletB里面把它自己的引用保存到一個靜態公用域,如:
  public class AppletB {
    public static AppletB selfRef = null; // Initially zero
  
    public void init() {
      // 保存當前實例的引用
      selfRef = this;
    }
    ...
  }
  
  
  
  
   現在AppletA可以訪問AppletB的實例:
  public class AppletA {
    AppletB theOtherApplet = null;
    public void callAppletB() {
   // 獲得靜態域的值,這個靜態域保存了
   // AppletB實例的引用
      theOtherApplet = AppletB.selfRef;
  
   // 接下來就可以調用AppletB實例
   // 的方法,例如:
      theOtherApplet.repaint();
    }
    ...
  }
  
  
  
  
   這樣就實現了兩個Applet的通信。由于不同的Applet共享運行時環境,因此即使這些Applet位于不同的頁面,這種方法也同樣有效。
  
   不過應當注重的是,上面的代碼不能處理這種情況:在AppletB沒有啟動之前就在AppletA里面調用callAppletB方法。假如發生這種情況,則selfRef的值將是null,Applet之間的通信不能正常進行。
  
  
   當然,我們還可以設計出更加通用的方法。我們可以創建一個類,這個類的唯一用途就是在自己的靜態數據結構中保存其他Applet的引用。下面是一個參考實現AppletList。想要讓其他Applet訪問自己的公用方法的Applet實例首先要在AppletList中注冊。按照AppletContext.getApplet(string name)方法的處理模式,每個注冊的Applet都和一個字符串相關聯。以后當其他Applet需要引用某個Applet實例時,這個字符串就可以作為鍵(即Applet的標識)使用。
  
   下面是Applet在AppletList中注冊的典型過程:
  public class AppletA {
    public void start() {
      AppletList.register("Stock-trade-applet", this);
      ...
    }
  }
  
  
  
  
   其他Applet訪問已注冊Applet的過程如下:
  public class AppletB {
    public void run() {
      AppletA tradeApplet =
        (AppletA) AppletList.getApplet("Stock-trade-applet");
      ...
    }
  }
  
  
  
  
   當Applet結束運行時它必須從ApplietList取消注冊:
  public void stop() {
    AppletList.remove("Stock-trade-applet");
    ...
  }
  
  
  
  
   AppletList類的完整代碼如下:
  0: import java.util.*;
  1: import java.applet.Applet;
  2:
  3: public class AppletList {
  4: PRivate static Hashtable applets = new Hashtable();
  5:
  6: public static void register(String name, Applet applet) {
  7: applets.put(name,applet);
  8: }
  9:
  10: public static void remove(String name) {
  11: applets.remove(name);
  12: }
  13:
  14: public static Applet getApplet(String name) {
  15: return (Applet) applets.get(name);
  16: }
  17:
  18: public static Enumeration getApplets() {
  19: return applets.elements();
  20: }
  21:
  22: public static int size() {
  23: return applets.size();
  24: }
  25: }
  
  
  
  
   請從本文后面下載exampleCode.zip了解更多有關如何應用AppletList類的信息。
  
   本方法的局限
  
   如前所述,參與通信的Applet必須具有相同的codebase。此外,假如你運行的是兩個不同的瀏覽器副本且Applet分別運行于這兩個瀏覽器中,由于這些Applet可能沒有共享運行時環境(這和瀏覽器版本、設置有關),因此它們可能不能進行通信。然而,假如你是從同一個瀏覽器創建出新的瀏覽器窗口,那么這個問題是不存在的。
  
   本文所介紹的技術已經順利通過好幾個平臺和瀏覽器版本的測試,但導致多個Applet擁有各自的運行時環境的配置還是存在的。順利通過測試的操作系統和瀏覽器組合如下所示:
  如何實現Applet之間跨瀏覽器窗口的通信
   小結
  
   本文介紹了一種新的實現Applet到Applet通信的方法,這種方法在無法使用Java API的getApplet()方法時仍然有效。把握了這種方法,你就有更多的機會在Web網站或Intranet上使用Applet——用它來替換getApplets方法,或者補充getApplets方法的不足。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线视频欧美日韩精品| 97超级碰碰碰久久久| 欧美日韩亚洲精品一区二区三区| 一区二区亚洲欧洲国产日韩| 精品日韩中文字幕| 成人妇女淫片aaaa视频| 亚洲最大福利网站| 欧美贵妇videos办公室| 国色天香2019中文字幕在线观看| 久久久久久久一区二区三区| 久久在精品线影院精品国产| 欧美激情视频在线免费观看 欧美视频免费一| 欧美成人免费在线观看| 日韩中文字幕网址| 国产精品午夜国产小视频| 日韩国产高清视频在线| 日韩一区av在线| 久久久久久久香蕉网| 色中色综合影院手机版在线观看| 国产亚洲精品美女久久久久| 成人有码在线播放| 欧美大片va欧美在线播放| 97视频在线观看免费高清完整版在线观看| 国产999精品久久久| 国产精品亚洲аv天堂网| 色偷偷偷综合中文字幕;dd| 在线电影中文日韩| 日韩免费观看在线观看| 欧美网站在线观看| 亚洲伊人久久综合| 欧美日韩美女在线观看| 狠狠躁夜夜躁人人爽天天天天97| 91精品国产自产91精品| 亚洲精品久久久久久久久久久久久| 日本sm极度另类视频| 欧美壮男野外gaytube| 亚洲成人a**站| 性欧美长视频免费观看不卡| 成人在线一区二区| 2020久久国产精品| 欧美国产欧美亚洲国产日韩mv天天看完整| 精品女厕一区二区三区| 亚洲欧美激情另类校园| 欧美日韩国产va另类| 亚洲国产精彩中文乱码av在线播放| 国产精自产拍久久久久久| 日本精品久久久久久久| 91久久精品一区| 欧美精品久久一区二区| 日韩美女中文字幕| 欧美成人免费观看| 欧美日韩国内自拍| 最新国产成人av网站网址麻豆| 一本大道久久加勒比香蕉| 色系列之999| 国产精品∨欧美精品v日韩精品| 欧美精品久久久久久久久| 高清日韩电视剧大全免费播放在线观看| 中文字幕国产日韩| 久热99视频在线观看| 欧美激情国产日韩精品一区18| 久久精品福利视频| 亚洲国产女人aaa毛片在线| 久久免费观看视频| 九九精品在线观看| 成人国产在线视频| 国产成人极品视频| 国产亚洲成av人片在线观看桃| 国产精品中文久久久久久久| 九九热最新视频//这里只有精品| 欧美精品在线免费| 亚洲色图在线观看| 欧美天天综合色影久久精品| 久久成人av网站| 国产不卡精品视男人的天堂| 色婷婷av一区二区三区在线观看| 欧美亚洲国产日韩2020| 国产精品情侣自拍| 亚洲va码欧洲m码| 国产精品www| 成人在线免费观看视视频| 国产精品最新在线观看| 日韩视频免费看| 亚洲精品小视频| 国语对白做受69| 欧美亚洲第一区| 国产亚洲欧美日韩精品| 亚洲最大福利视频网站| 伊人av综合网| 欧美成人免费大片| 欧美国产亚洲视频| 91九色国产社区在线观看| 久久久www成人免费精品| 日韩视频欧美视频| 96精品视频在线| xvideos亚洲| 亚洲经典中文字幕| 久久精品中文字幕免费mv| 国外成人在线直播| 精品成人国产在线观看男人呻吟| 日韩黄色高清视频| 久久久综合免费视频| 日韩美女在线看| 色偷偷偷综合中文字幕;dd| 亚洲成人xxx| 久久69精品久久久久久久电影好| 欧美一级淫片丝袜脚交| 久久精品美女视频网站| 亚洲高清不卡av| 亚洲久久久久久久久久久| 国产精品丝袜久久久久久不卡| 成人黄色在线观看| 亚洲国产日韩欧美综合久久| 4444欧美成人kkkk| 最好看的2019的中文字幕视频| 久久成人人人人精品欧| 久久久久久噜噜噜久久久精品| 久久久国产精品免费| 综合欧美国产视频二区| 亚洲国语精品自产拍在线观看| 国产精选久久久久久| 日韩在线视频免费观看| 国产精品久久久久久超碰| 激情懂色av一区av二区av| 亚洲精品久久久久久久久久久久| 亚洲成人中文字幕| 国产精品1区2区在线观看| 欧美特黄级在线| 日韩最新免费不卡| 日本一区二区三区在线播放| 在线a欧美视频| 色悠悠久久88| 国产日韩精品在线| 亚洲人成伊人成综合网久久久| 亚洲乱码国产乱码精品精天堂| 久久人人爽人人爽人人片亚洲| 正在播放亚洲1区| 亚洲成人av资源网| 成人免费网站在线看| 久久av在线播放| 日韩中文字幕视频在线| 国产精品入口免费视频一| 精品福利樱桃av导航| 亚洲电影免费观看高清完整版在线| 欧美日韩精品国产| 国产精品一区专区欧美日韩| 自拍偷拍亚洲在线| 人人做人人澡人人爽欧美| 69久久夜色精品国产69乱青草| 国产精品亚洲精品| 欧美精品18videos性欧美| 午夜精品蜜臀一区二区三区免费| 亚洲女在线观看| 久久久久久久久久久91| 亚洲天堂一区二区三区| 日韩欧美黄色动漫| 孩xxxx性bbbb欧美| 久久噜噜噜精品国产亚洲综合| 97久久精品人搡人人玩| 91av在线精品| 国产精品久久久av久久久| 欧美在线性爱视频| 欧美肥老太性生活视频| 日韩在线观看免费高清|