【问题标题】:classic ASP not seeing vbscript经典的 ASP 看不到 vbscript
【发布时间】:2014-11-14 10:21:27
【问题描述】:

我必须支持使用经典 ASP 和 VBScript 开发的旧 Web 服务器。我在带有 IIS 7.5 的 Windows 7 上运行。

我按照this article 中有关配置 IIS 的所有说明进行操作。 网页加载完毕,但 JS 似乎看不到 VBScript 中的函数。

我有这个代码:

<%@ Language=VBScript %>
<!-- #include file="HebrewMeta_UTF8.jv"-->
<link rel="stylesheet" type="text/css" href="../Class.css">
<html>
<head>
<%
  Nm=Request("Nm")
%>
<title>my page</title>
</head>
<script LANGUAGE="javascript">
  var Nm = "<%=Nm%>";
  function onCheckPro() {
    nm = window.navigator.appName;

    if ((nm.indexOf("Explorer") == "-1") && (nm.indexOf("Netscape") == "-1")){
        alert(" Compatibility שינוי הגדרות ");

        window.open("http://www.comax.co.il/InstallTools/compatibility-view.reg");
        //alert("ניתן להפעיל באקספלורר בלבד");
        //return;
    }
    document.all.fr.src = "CheckLogInPro.asp?Kod=" + escape(Kod.value) + "&Pass=" + escape(Pass.value) + "&Date=" + vbDate();
  }
</script>
<script LANGUAGE="vbscript">
  function vbDate()
    vbDate=Cstr(Day(Date()))+"/"+Cstr(Month(Date()))+"/"+Cstr(Year(Date()))+"  "+Cstr(hour(Now()))+":"+Cstr(Minute(Now()))+":"+Cstr(Second(Now()))
  end function
</script>

我不断收到“'vbDate' 未定义”。

站点 ASP 的脚本语言设置为 VBScript。

【问题讨论】:

  • 您在那里编写的是“客户端”VBScript,因此客户端(您的 Internet 浏览器)需要支持 VBScript。如果您想在经典 ASP 中使用“服务器端”VBScript,您有两个选择使用&lt;script language="vbscript" runat="server"&gt;&lt;/script&gt;&lt;% %&gt;。默认情况下,&lt;% %&gt; 标记内编写的任何代码都将在“服务器端”上执行 VBScript(VBScript 是 Classic ASP 的默认脚本引擎)。
  • 老实说,看看您的代码 sn-p 我不确定您是否了解“客户端”、“服务器端”脚本的概念。如果您尝试在“客户端”执行 VBScript,您需要使用支持它的浏览器,例如 Internet Explorer。但老实说,只要使用 JavaScript,它就更容易被所有主流浏览器访问和支持。
  • 因为我写的这不是我的代码,我需要开始支持它。我在 IExplorer 上打开了两个选项卡,一个用于安装在我的服务器 (win7) 上的站点,一个用于旧站点。旧网站在 vbscript 上运行良好,我的不是。我无权访问旧站点服务器,所以我不完全知道它是如何配置的,我唯一看到的是它在那里工作正常并且在我的服务器上运行时不起作用,所以我认为这是一个服务器问题。
  • OK 发现问题,不得不将我的本地主机添加到兼容性视图列表中
  • 重点仍然是使用 VBS 客户端意味着您的脚本将无法在 Chrome 或 Firefox 中运行,您将被限制使用 IE。找到一个 javascript 函数来捕获当前日期/时间应该不难。您的函数 onCheckPro() 看起来像是在检查 Netscape,这使它至少有 10 年历史

标签: iis vbscript asp-classic


【解决方案1】:

不是答案,而是三个警告:

  1. vbDate 是预定义的data type constant;用它来命名函数是自找麻烦。
  2. VBScript 中的字符串连接是 &,而不是 +。
  3. 不应在表达式中多次使用 Date() 或 Now() 等易失性函数。

更新评论:

喜欢危险生活的人应该看看:

WScript.Echo vbDate(), checkType(Now())

Function vbDate()
  vbDate = "vbDate is a predefined constant: >" & vbDate & "<"
End Function

Function checkType(x)
  Select Case VarType(x)
    Case vbDate
      checkType = x & " is a date"
    Case Else
      checkType = x & " is an abomination"
  End Select
End Function

输出:

cscript xvbdate.vbs vbDate 是一个预定义的常量:>

修改函数名后的输出:

cscript xvbdate.vbs vbDate 是一个预定义的常量:>7

【讨论】:

  • 1. VBScript 可以区分Const vbDatevbDate()。它们不一样,我同意 vbDate 是内置的,但在这种情况下不会引起问题。 2. + 作为连接运算符在 VBScript 中非常好,但如果您尝试连接数字类型,则会出现歧义。 OPs 代码使用CStr() 的事实否定了这种可能性。
  • 公平点,很好的示范。我擦洗我之前的观点 1。+1
【解决方案2】:

在使用任何变量之前,您应该为该变量指定数据类型 暗淡或变种

vb日期

vbDate=Cstr(Day(Date()))+"/"+Cstr(Month(Date()))+"/"+Cstr(Year(Date()))+" "+Cstr(hour( Now()))+":"+Cstr(Minute(Now()))+":"+Cstr(Second(Now()))

【讨论】:

  • Dim 在 VBScript 中声明一个变量,var 什么都不做(那是 JavaScript)。无论哪种情况,您都没有给它一个数据类型,VBScript 中的所有变量都是variant 数据类型,因为 VBScript 是一种 typeless 语言。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多