【问题标题】:What is this "Unknown Name" JSException in Internet Exlorer 6?Internet Explorer 6 中的“未知名称”异常是什么?
【发布时间】:2012-05-24 13:12:51
【问题描述】:

我正在使用 JSObject 从我的 Applet 调用 Javascript 函数。

我的 Applet 的 SSCCE:

package ch.vrag.web;

import java.applet.Applet;
import java.security.AllPermission;
import java.security.CodeSource;
import java.security.PermissionCollection;
import java.security.Permissions;
import java.security.Policy;

import netscape.javascript.JSObject;

public class Sscce extends Applet {

private static final long serialVersionUID = -5403444704039831864L;

public void init() {
    try {
        Policy.setPolicy(new Policy() {
            Permissions perms = new Permissions();

            public PermissionCollection getPermissions(CodeSource codesource) throws SecurityException {
                AllPermission grant = null;
                grant = new AllPermission();
                perms.add(grant);
                return perms;
            }

            public void refresh() {
                // Do nothing
            }
        });
    }
    catch (Exception e) {
    }

    JSObject window = JSObject.getWindow(this);

    JSObject phoneNums = (JSObject) window.eval("getWindowRectangle()");

    int x;
    int y;
    int width;
    int height;

    if (phoneNums.getSlot(0) instanceof Integer) {
        x = (Integer) phoneNums.getSlot(0);
        y = (Integer) phoneNums.getSlot(1);
        width = (Integer) phoneNums.getSlot(2);
        height = (Integer) phoneNums.getSlot(3);
    }
    else if (phoneNums.getSlot(0) instanceof Double) {
        x = ((Double) phoneNums.getSlot(0)).intValue();
        y = ((Double) phoneNums.getSlot(1)).intValue();
        width = ((Double) phoneNums.getSlot(2)).intValue();
        height = ((Double) phoneNums.getSlot(3)).intValue();
    }
    else {
        return;
    }

    System.out.println("x: " + x + " y: " + y + " width: " + width + " height: " + height);

};
}

我的 HTML 文件的 SSCCE:

 <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <script type="text/javascript">
        function getWindowRectangle(){

            var winX = (document.all)?window.screenLeft-2:window.screenX;
            var winY = (document.all)?window.screenTop-2:window.screenY;

            var winWidth = (document.all)?document.documentElement.offsetWidth+4:window.outerWidth;
            var winHeight = (document.all)?document.documentElement.offsetHeight+4:window.outerHeight;

            return([winX,winY,winWidth,winHeight]);
        }       
    </script>

    <title>SSCCE</title>
</head>
<body>
    this is an SSCCE
    <APPLET CODE="ch.vrag.web.Sscce.class" name="SSCCE" codebase="scripts" archive="Sscce.jar" width=0 height=0 MAYSCRIPT >
    </APPLET>
</body>

这在 Internet Explorer 6 中效果很好。我有这个 Java 异常:

java.lang.Exception: netscape.javascript.JSException: Unknown Name

这个异常有什么用?我做错了什么?

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE。
  • 所以贵公司支持 7.1%? IE6 countdown
  • @epascarello 不是我们公司不支持它......我们的客户 -.- 是的,这很烦人......
  • 我希望你做 +150% 的成本调整来支持它,如果你的客户支持它,你的公司也支持它。 :) 我当然希望他们查看他们的日志并看到 0.1% 的人使用该浏览器。 :)

标签: java javascript applet jsobject


【解决方案1】:

Internet Explorer 6 的 getSlot() 命令似乎有问题,但我可以使用解决方法。

使用此对象:
JSObject phoneNums = (JSObject) window.eval("getWindowRectangle()");

我可以从 phoneNumbs (phoneNums.toString();) 中得到一个字符串,这个字符串以这种形式给了我我的返回值:

“数字1,数字2,数字3,数字4”

这样我就可以拆分字符串并得到我需要的数字。

这个故事的寓意是,Internet Exlorer 6 不是现代的,不应该再使用了!

【讨论】:

    【解决方案2】:

    这与浏览器无法正常运行 Javascript 有关。确保 IE6 已修补到 SV3 版本并启用 Javascript 以及可能的安全设置。

    【讨论】:

    • 它是 Sv2 ...你认为它可能是这样的吗?
    • @Neifen 看到你需要如何在 IE6 上测试它,你需要你能得到的所有帮助。有可能 IE6 甚至不支持那些特定的 Javascript 函数。
    • javascript函数不是问题,问题是getSlot我想...但我不知道为什么
    【解决方案3】:

    Read/Write HTML field values from Java 的底部是细则:

    为获得最佳效果,切勿在 Applet 的 init() 方法中使用 LiveConnect JSObject。

    当时的原因通常是null。我在小程序start() 方法中获得了对JSObject 的引用取得了更大的成功。


    JSObject phoneNums = (JSObject) window.eval("getWindowRectangle()");
    

    我怀疑这应该是JSObject.call("getWindowRectangle()")。对返回的 Object 进行一些调试,在调试器中检查它以检查内容是否符合您的预期。

    【讨论】:

    • 同样的错误。我试图注释代码行以查看错误在哪里,当我在 Applet 中注释 getSlot() 命令的行时,我确实没有错误了...
    • hmm 这不是更好......但是当我追踪属性phoneNums我得到“123,322,2135,342”(发明数字)所以我想我可以拆分它而不是制作@987654331 @东西...
    猜你喜欢
    • 2014-02-18
    • 2014-08-11
    • 2011-04-26
    • 2010-11-12
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    相关资源
    最近更新 更多