我有一个在火狐中运行良好的小程序,但是在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我真的不知道从哪里开始..
发布于 2012-05-17 17:09:29
我没有在我的问题中包括它,但我使用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的方式有关,但我从来没有找到任何关于它的文档。我正在使用以下代码部署applet -
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-04-12 20:07:28
在each中,您应该在jQuery函数中使用this关键字。此外,对于name可以使用prop函数,对于value可以使用val()函数。所以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 etchttps://stackoverflow.com/questions/10122964
复制相似问题