在所有浏览器中使用JQuery而不是ActiveX控件中的VBScript进行TreeView

在所有浏览器中使用JQuery而不是ActiveX控件中的VBScript进行TreeView,jquery,ms-access,vbscript,treeview,activex,Jquery,Ms Access,Vbscript,Treeview,Activex,我们的团队已经使用了三到四年的TreeView,它让我们的Internet Explorer用户能够在一个TreeView列表中简单地查看来自MS Access数据库和MSSQL 2005服务器的数据 自这一发展以来,我们形成了一个两难的局面。用户开始被允许使用Google Chrome和Firefox,而Google Chrome和Firefox未包含在原始用例中,并且与TreeView ActiveX控件不兼容。该对象在Internet Explorer外部编码。我相信这个最初的想法来自 除

我们的团队已经使用了三到四年的TreeView,它让我们的Internet Explorer用户能够在一个TreeView列表中简单地查看来自MS Access数据库和MSSQL 2005服务器的数据

自这一发展以来,我们形成了一个两难的局面。用户开始被允许使用Google Chrome和Firefox,而Google Chrome和Firefox未包含在原始用例中,并且与TreeView ActiveX控件不兼容。该对象在Internet Explorer外部编码。我相信这个最初的想法来自

除了使用当前没有服务器端脚本可用的限制或其他技术,还有什么简单的替代方法可以实现这一点

同样,这里的目标是使它与大多数主流浏览器兼容

注意:我已尝试使用服务器端脚本,但这不是此项目的选项。因此,答案不应该针对使用
JSP
PHP
ASP
等。。。相反,这里的尝试是找到一种方法,使用共享网络上的本地文件来执行此操作

是的,我知道这类设置中涉及的安全漏洞。。。不管怎样,这一直是方向

例如,下面是正在使用的对象:

 <body onload="SetupPage()">
      <object classid="CLSID:C74190B6-8589-11D1-B16A-00C0F0283628" id="MainTree" width="100%" height="290" style="font-family: times new roman; font-size: 16px; Visibility: visible">
        <param name="Style" value="7">
        <param name="_ExtentX" value="5292">
        <param name="_ExtentY" value="10583">
        <param name="_Version" value="393217">
        <param name="HideSelection" value="0">
        <param name="Indentation" value="767">
        <param name="LabelEdit" value="0">
        <param name="LineStyle" value="1">
        <param name="PathSeparator" value="\">
        <param name="Sorted" value="0">
        <param name="Checkboxes" value="0">
        <param name="FullRowSelect" value="0">
        <param name="HotTracking" value="1">
        <param name="Scroll" value="1">
        <param name="SingleSel" value="0">
        <param name="ImageList" value="ImgList">
        <param name="BorderStyle" value="1">
        <param name="Appearance" value="1">
        <param name="MousePointer" value="0">
        <param name="Enabled" value="1">
        <param name="OLEDragMode" value="0">
        <param name="OLEDropMode" value="0">
      </object>
      <object classid="CLSID:2C247F23-8591-11D1-B16A-00C0F0283628" id="ImgList" width="0" height="0" style="visibility: hidden"></object>
  <IFrame id="PrtFrame" style="width: 0px; height: 0px">
  </IFRAME>
 </body>

将此对象放置在网页正文中后,对某些VBScript的调用允许使用以下内容填充此对象:

 <script language="vbscript">

    Sub SetupPage()

        Call MainTree.Nodes.Clear
        Call PopulateImageList
        Call PopulateTree

    End Sub

    Sub PopulateTree()

        Dim rs       ' RecordSet
        Dim i        ' Index
        Dim ndParent ' Parent Node

        ' Assign the main html form to a variable xfrm
        Set xfrm = document.MainForm

        ' Setup a connection with the Database
        Set AccessConn = CreateObject("ADODB.Connection")
        AccessConn.open AccessConnectionString
        strSQL = "SELECT..."
        Set rs = AccessConn.Execute(strSQL) 

        ' Manually set the parent nodes
        i = 1
        Set ndActive = MainTree.Nodes.Add(, 2, "IDC" & i, "Active", ImageIndex("active"))

        ' Move one forward, since the parent node was set manually
        i = i + 1
        Do While rs.EOF = False

            ' Add the detail to each parent node for each record returned...
            rs.MoveNext
        Loop
        ' etc...
    End Sub

    Sub PopulateImageList()

      Dim lst
      set lst = ImgList.ListImages.Add(1,"header",LoadPicture(DirectoryPath & "TreeImages\header.gif"))
      set lst = ImgList.ListImages.Add(2,"hold",LoadPicture(DirectoryPath & "TreeImages\hold.gif"))
      set lst = ImgList.ListImages.Add(3,"reviewed",LoadPicture(DirectoryPath & "TreeImages\reviewed.gif"))
      set lst = ImgList.ListImages.Add(4,"completed",LoadPicture(DirectoryPath & "TreeImages\completed.gif"))
      set lst = ImgList.ListImages.Add(5,"rejected",LoadPicture(DirectoryPath & "TreeImages\rejected.gif"))
      set lst = ImgList.ListImages.Add(6,"printed",LoadPicture(DirectoryPath & "TreeImages\printer.gif"))
      set lst = ImgList.ListImages.Add(7,"active",LoadPicture(DirectoryPath & "TreeImages\active.gif"))
      set lst = ImgList.ListImages.Add(8,"archived",LoadPicture(DirectoryPath & "TreeImages\archived.gif"))
      set lst = ImgList.ListImages.Add(9,"emailed",LoadPicture(DirectoryPath & "TreeImages\emailed.gif"))
      set lst = ImgList.ListImages.Add(10,"assigned",LoadPicture(DirectoryPath & "TreeImages\assigned.gif"))

    End Sub
 </script>

子页面()
调用MainTree.Nodes.Clear
调用PopulateImageList
调用PopulateTree
端接头
亚种群树()
Dim rs记录集
Dim i’索引
Dim ndParent的父节点
'将主html表单分配给变量xfrm
设置xfrm=document.MainForm
'设置与数据库的连接
Set AccessConn=CreateObject(“ADODB.Connection”)
AccessConn.open AccessConnectionString
strSQL=“选择…”
设置rs=AccessConn.Execute(strSQL)
'手动设置父节点
i=1
设置ndActive=MainTree.Nodes.Add(,2,“IDC”和i,“Active”,ImageIndex(“Active”))
'向前移动一个,因为父节点是手动设置的
i=i+1
当rs.EOF=False时执行
'将每个返回记录的详细信息添加到每个父节点。。。
下一个
环
“等等。。。
端接头
子PopulateImageList()
暗lst
set lst=ImgList.ListImages.Add(1,“header”,LoadPicture(DirectoryPath&“TreeImages\header.gif”))
set lst=ImgList.ListImages.Add(2,“保持”,LoadPicture(DirectoryPath&“TreeImages\hold.gif”))
set lst=ImgList.ListImages.Add(3,“已审阅”,加载图片(DirectoryPath&“TreeImages\revieved.gif”))
set lst=ImgList.ListImages.Add(4,“已完成”,LoadPicture(DirectoryPath&“TreeImages\completed.gif”))
set lst=ImgList.ListImages.Add(5,“已拒绝”,LoadPicture(DirectoryPath&“TreeImages\rejected.gif”))
set lst=ImgList.ListImages.Add(6,“打印”,加载图片(DirectoryPath&“TreeImages\printer.gif”))
set lst=ImgList.ListImages.Add(7,“活动”,LoadPicture(DirectoryPath&“TreeImages\active.gif”))
set lst=ImgList.ListImages.Add(8,“存档”,LoadPicture(DirectoryPath&“TreeImages\archive.gif”))
set lst=ImgList.ListImages.Add(9,“emailed”,LoadPicture(DirectoryPath&“TreeImages\emailed.gif”))
set lst=ImgList.ListImages.Add(10,“已分配”,LoadPicture(DirectoryPath&“TreeImages\assigned.gif”))
端接头
一旦源数据库中的数据可用,用户只需打开共享网络上的本地文件,就会看到如下所示:


任何实现这一点的想法或方法都将不胜感激

好吧,让我们从不同的角度来看这个问题。。。忘记从客户端[JavaScript]访问数据库。比什么好?只需使用SQLServer作为web服务器来提取数据。它被称为。通过这种方式,您可以在SQL Server端实现数据访问逻辑(包括通过任何可用接口进行MS访问)。因此,现在SQLServer的web服务返回可以使用jQuery()在客户端(AJAX)操作的数据

以下是我为端点部分找到的一些链接:

我从未实现过SQL Server端点,因此无法判断这是否容易。然而,我也做了类似的工作,效果非常好

我就是这么看的

附言。
我对您的本地文件方法有点困惑

您可以使用Access处理数据绑定,然后使用动态填充所需内容的web浏览器控件(即Internet Explorer)。使用document.write,您可以填充所有内容,而无需在主机上实际创建任何HTML/JS/CSS。对于图像,您可以只嵌入datauri

您可以根据用户交互的需要绑定事件,这并不漂亮,但可以确保一个受控的环境(您强制他们使用IE而不给他们任何源代码),并且不需要特殊的数据库交互(因为MS Access为您做了所有这些)

MSDN有多篇关于控件的文章:

我是现役空军,正在为欧洲的一个单位开发一个“网络应用程序”,有着非常类似的限制。我最后做的是使用MS Access启动IE并截取Navigate2事件进行处理。在web端,我正在构建一种基于jQuery的模板语言来处理所有SQL乐趣。这使我能够完全用HTML/JS/CSS whi编写应用程序