2

我有一个在 Firefox 中运行良好的小程序,但是在 ie8(我认为是 ie7)中,javascript 似乎无法访问小程序方法。

在 js 调试器中 -

scanApplet.addUploadParameter

给了我一个java异常-

java.lang.NoSuchFieldException: addUploadParameter in class: co.altcom.cache.scanner.CacheScan

我实际上试图运行的(jquery)代码是

$('input, select').each(function () {
    scanApplet.addUploadParameter(this.name, this.value);
});

这是抛出以下java异常 -

java.lang.NullPointerException

我真的不知道从哪里开始。。

4

2 回答 2

2

each您应该在 jQuery 函数中使用包装在其中的关键字this。另外,name可以使用propfunction,value可以使用val()function。所以jQuery将是:

$('input, select').each(function () {  
    scanApplet.addUploadParameter($(this).prop('name'), $(this).val());  
}); 

那应该修复 JavaScript 位。如果没有更多信息,我无法判断它是否解决了您的所有问题,以及是否修复了 Java 错误,因此如果您在此之后仍需要更多帮助,请联系我们并提供更多信息。

编辑
在评论中提到 IE7 仍然存在问题。您应该在 IE7 中调试调用,然后查看代码的哪一部分给您带来了麻烦。一种快速、老旧且非常肮脏的方法是仅记录或警告事物以查看问题所在。例如:

    // scanApplet.addUploadParameter($(this).prop('name'), $(this).val());
    alert(scanApplet);
    alert(scanApplet.addUploadParameter);
    alert($(this).prop('name'));
    // etc etc
于 2012-04-12T12:07:28.447 回答
0

我没有在我的问题中包含它,但我正在使用 jquery 创建 scanApplet 变量 -

var scanApplet = $('#scanApplet')[0]

看起来scanApplet问题出在变量上。下面的代码解决了这个问题。

        $('input, select').each(function () {
            var el_name = $(this).prop('name');
            var el_value = $(this).val();
            if (Browser.Version() < 8) {
                scanApplet.addUploadParameter(el_name, el_value);
            } else {
                $('#scanApplet')[0].addUploadParameter(el_name, el_value);
            }
        });

我不知道为什么ie7允许我像这样引用小程序,我的代码中没有指定scanApplet - 我想这与java的deployJava.js处理ie的方式有关,但我从未找到任何关于它的文档. 我正在使用以下方式部署小程序 -

        var attributes = {id: 'scanApplet', code: "{{ jar_path }}",  width:1, height:1} ;
        var parameters = {jnlp_href: "{{ jnlp_path }}"} ;
        deployJava.runApplet(attributes, parameters, '1.6');

我也不知道是什么破坏了我的代码,我想我已经更改了我一直在使用的 jquery 版本,但我尝试快速将 1.6.1 换成 1.4.2,但这并没有修复我的原始代码。

无论如何,通过它的 id 引用小程序似乎可以解决我在 ie7 中的问题。

于 2012-05-17T09:09:29.217 回答