2

JavaScript メソッドを呼び出すアプレットの小さなテストを実行しようとしています。コードは IE 9.0 と Firefox 17.0 では正常に動作しますが、Chrome 23.0.1271.91 m では動作しません。

この特定のバージョンの Chrome の問題かどうかはわかりませんが、そうではないと思います。

基本的に、「object」タグと「iframe」タグを使用してアプレットを宣言するメインの HTML ページがあります。別のファイルには、メイン ページから iframe に読み込まれる HTML ページがありますが、アプレットによってコマンドが実行されます。

main.html ファイルでは、HTML5 に準拠するために「applet」の代わりに「object」タグを使用しています。このテストは「アプレット」タグを使用して機能するはずですが、「アプレット」タグを使用することはまさに私が避けようとしているものです。

アプレット コード:

package tests.javaplugin;

import java.applet.Applet;
import java.util.*;

import netscape.javascript.JSObject;

public class PluginTestApplet extends Applet {

   private static final long serialVersionUID = 492358995598940846L;
   private static Timer theTimer = new Timer(true);

   private static JSObject theWindow;

   @Override
   public void init() {
      System.out.println("entering init()");
      theWindow = JSObject.getWindow(this);
      System.out.println("exiting init()");
   }

   public void loadComplete() {
      System.out.println("calling loadComplete()");
      theTimer.schedule(new ShowPageTimerTask(), 100);
      System.out.println("returning loadComplete()");
   }

   public int getRandomInteger() {
      System.out.println("calling getRandomInteger()");
      final int random = (int) Math.abs(Math.random() * 100);
      System.out.println("returning getRandomInteger(): " + random);
      return random;
   }

   private class ShowPageTimerTask extends TimerTask {

      @Override
      public void run() {
         System.out.println("entering ShowPageTimerTask.run()");
         theWindow.call("showPage", new String[] { "./page.html" });
         System.out.println("exiting ShowPageTimerTask.run()");
      }

   }

}

main.html コード:

<!DOCTYPE html>
<html>
   <head>
      <meta charset="windows-1252">
      <title>Testing Java Plug-in in Java 7.0</title>
      <script src="./mainControl.js"></script>
   </head>
   <body onload="onBodyLoad()">
      <!--[if !IE]>-->
      <object id="applet_embed" width="0" height="0"
         type="application/x-java-applet;version=1.7">
      <!--<![endif]-->
      <!--[if IE]>
      <object id="applet_embed" width="0" height="0"
         classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93">
      <![endif]-->
         <param name="archive" value="PluginTestApplet.jar">
         <param name="codebase" value="./">
         <param name="code" value="tests.javaplugin.PluginTestApplet">
         <param name="scriptable" value="true">
         <param name="mayscript" value="true">
         No Java 2 SDK, Standard Edition v 1.7 support for APPLET!
      </object>
      <div id="principalDIV" style="position: absolute; width: 640px; height: 480px; top: 0px; left: 0px; scrolling: no; visibility: visible; z-index: 0; overflow: hidden; leftmargin=0px; topmargin=0px; background-color: #000000">
         <iframe id="ifPrincipal" style="position: absolute; width: 100%; height: 100%; visibility: visible; scrolling: no; overflow-x: hidden; overflow-y: hidden;">
         </iframe>
      </div>
   </body>
</html>

mainControl.js コード:

function getApplet() {
   return document.getElementById("applet_embed");
}

function onBodyLoad() {
   getApplet().loadComplete();
}

function getRandomInteger() {
   return getApplet().getRandomInteger();
}

function showPage(aURL) {
   var iframePrincipal = document.getElementById("ifPrincipal");
   if (iframePrincipal.src != null) {
      iframePrincipal.src = aURL;
   } else {
      alert("Error! iframe src = null! " + iframePrincipal.src);
   }
}

page.html コード:

<!DOCTYPE html>
<html>
   <head>
      <meta charset="windows-1252">
      <title>Testing Java Plug-in in Java 7.0</title>
      <script src="./control.js"></script>
   </head>
   <body onload="onBodyLoad()" style="background-color: #000000; color: #ffffff; font-family: Tahoma; font-size: 35px;" >
      <div>Testing dynamic HTML i-frame commanded by Java Plug-in.</div>
      <div style="float: left;">The random number is&nbsp;</div><div id="randomNum" style="float: left;">&nbsp;</div>
   </body>
</html>

control.js コード:

function onBodyLoad() {
   var randomNumber = parent.getRandomInteger();
   var randomNumberDiv = document.getElementById("randomNum");
   randomNumberDiv.innerHTML = randomNumber;
}

コンソール (開発ツール) に次のエラーが表示されます。

Uncaught TypeError: Object #<HTMLObjectElement> has no method 'loadComplete' mainControl.js:6
Failed to load resource file:///C:/Projects/Tests/javaplugintest/tests.javaplugin.PluginTestApplet

では、Chrome に必要な「オブジェクト」タグ宣言にトリックや特定のパラメーターはありますか?

4

0 に答える 0