webservice.htc,moz-behavior和Firefox 3

时间:2008-10-31 12:44:26

标签: javascript web-services firefox cross-browser html-components

虽然试图让我们的应用程序在Firefox中工作(我是X-Browser支持的主要支持者,但我们的主要开发人员拒绝我说IE已经足够好了)。所以我正在做一个小小的项目来看看转换的工作量。

我马上就遇到了问题。

main.aspx页面使用仅IE的方法绑定到web服务,该方法通过htc文件添加行为,该文件由VS我相信自动生成。

Firefox不支持此功能,但有一个xml绑定文件可用于启用htc支持(请参阅此处:http://dean.edwards.name/moz-behaviors/overview/)。这些例子在FF3中工作,但是当我像往常一样使用webservice.htc时:

//Main.aspx
/*SNIP*/
<style type="text/css" media="all">
    #webservice
    {
        behavior:url(webservice.htc);
        -moz-binding:url(bindings.xml#webservice.htc);
    }
</style>
</head>
<body>
<div id="webservice"></div> <!-- we use this div to load the webservice stuff -->
/*SNIP*/

//Main.js
webservice.useService(url + asmpath + "/WebServiceWrapper.asmx?WSDL","WebServiceWrapper");

我得到webservice没有定义(在IE中工作正常),我显然试过

var webservice = document.getElementById("webservice") 

$("#webservice").useService(url + asmpath + "/WebServiceWrapper.asmx?WSDL","WebServiceWrapper");

也只是在Firebug中给我“useService未定义”。这使我感到相信绑定不起作用。但是我可以看到Firefox在Firebug控制台窗口中加载了webservice.htc。

任何人都有这方面的经验吗?

我是否必须重写网络服务的调用方式?

干杯, 罗布

2 个答案:

答案 0 :(得分:2)

我认为您没有以正确的方式实现真正的跨浏览器兼容性。为Firefox添加对IE特定功能的支持肯定是的方式。 Opera,Safari,Chrome怎么样?如果您正在使用的应用程序严格用于Intranet,那么支持Firefox可能就足够了......

恕我直言,代码应该重构,但另一方面。如果您正在使用ASP.NET 2.0(在这种情况下,您需要ASP.NET Ajax)或更新,您可以在Ajax和SOAP Web服务之间创建代理。在这种情况下,您需要将所有行为重写为JavaScript代码,这可能不是一个小小的壮举。

旁注:AFAIK VS.NET不会产生行为。

对不起,如果这不太有用:(

答案 1 :(得分:1)

您的jQuery代码段有错误:因为useService是在节点本身定义的方法,而不是jQuery对象,所以您必须这样做:

$("#webservice")[0].useService(url + asmpath +
  "/WebServiceWrapper.asmx?WSDL","WebServiceWrapper");