Javascript 从IE地址栏执行Vbscript

Javascript 从IE地址栏执行Vbscript,javascript,browser,vbscript,Javascript,Browser,Vbscript,有没有一种方法可以直接从地址栏执行vbscript代码?我正在寻找类似于JavaScript的东西 另一方面,从浏览器运行vbscript不是一个主要的安全风险吗,因为它在运行时比JavaScript有更多的特权?与JavaScript的方式基本相同,只是工作不太好: vbscript:replace(document.body.innerhtml,“地址栏”,“三明治”) 本质上,这将导航到一个页面,该页面的源相当于函数调用的返回值 我尝试执行没有返回结果的命令时,会在页面上导致错误 至于你的

有没有一种方法可以直接从地址栏执行vbscript代码?我正在寻找类似于JavaScript的东西


另一方面,从浏览器运行vbscript不是一个主要的安全风险吗,因为它在运行时比JavaScript有更多的特权?

与JavaScript的方式基本相同,只是工作不太好:
vbscript:replace(document.body.innerhtml,“地址栏”,“三明治”)

本质上,这将导航到一个页面,该页面的源相当于函数调用的返回值

我尝试执行没有返回结果的命令时,会在页面上导致错误


至于你的旁注,不是真的。浏览器限制了脚本的功能。例如,您可以通过
CreateObject(“任意”)
使用VBS自动创建对象,但如果从浏览器运行,则会提示您允许使用Active-X控件。(你可以用Javascript做同样的事情)

你可以像调用Javascript一样调用VBScript,我的意思是“完全”。对于VBScript和Javascript,语言说明符(Javascript:或VBScript:)后面的“命令”通过将命令字符串传递到(相关语言的)eval()“执行”。Javascript和VBScript之间的区别在于,对于VBScript,
eval()
的参数必须是有效的VBScript表达式,而对于Javascript,
eval()
将解析并执行语法上有效的Javascript字符串,无论它是否是单个Javascript表达式,并返回该字符串中最后执行的表达式语句的值(如果没有,则返回
Void
)。因此,尽管

javascript:for(i=0;i<5;++i)alert(i)
不是

不要绝望,有一个解决办法。
Execute
ExecuteGlobal
都被定义为“语句”(尽管它们实际上的行为类似于预定义的过程,也称为Subs),因此不能用作传递给
eval()
的“表达式”,至少不能以其通常的语法形式使用

Execute <some string containing statements>
ExecuteGlobal <some string containing statements>
VBScript似乎很乐意“评估”它们,即使没有返回值,这对于trueVBScript函数是必需的(即使返回的“值”为零或空)。Javascript中没有“Void”的概念。请注意,我仅出于完整性考虑才包括
ExecuteGlobal
eval()
从地址栏执行的任何“命令”都已在全局范围内

事实上,这种“假装”也适用于其他程序。特别是,
警报
<代码>警报没有返回值,因此不是VBScript函数。它通常会被调用(在
元素中),作为

而且他们工作(带有“你真的想这么做吗?”的警告)。因此,
Execute
ExecuteGlobal
(以及
Eval
BTW)似乎不是真正的“语句”(或函数),而是全局对象的方法,如
alert
。它们包含在VBScript引用中,因为每个实现都必须包含它们,就像每个Javascript实现都必须有一个Global.parseInt()。但这是个好消息,因为它允许我们做类似的事情

vbscript:execute("if left(document.URL,5) <> ""https"" then alert(""NOT SECURE!!!!!"")")
vbscript:execute(“如果离开(document.URL,5)”“https”,然后发出警报(“不安全!!!”)
当然,所有这些中最大的警告是
它只在INTERNET EXPLORER中工作,然后只在IE10中工作
没有其他浏览器运行VBScript(甚至Edge),并且从IE11起它已被完全禁用。您可以通过使用开发人员工具或使用

<meta http-equiv="X-UA-COMPATIBLE" content="IE=7"> (or 8 or 9 or 10)
(或8、9或10)
(甚至可以在Edge中强制IE模式,然后是兼容模式,但我还没有尝试过。)

所以,实际上,整个答案在很大程度上是学术性的(2020年)。它告诉您如何做一些可能比努力学习Javascript更难(也不太通用)的事情。如果您已经可以使用Javascript,为什么还要尝试使用VBScript呢?此外,可能还有一些用户仍然在XP上运行IE7,他们只知道VBScript。我知道,我只有在没有其他选择的情况下才能升级

如果它没有坏,就不要修理它

是的,我知道IE7(IE*)已经相当崩溃(和XP),但是,嘿,如果你对你所拥有的感到满意,那么你还想要什么呢

alert <some message string>
vbscript:alert(<some message string>)
<script type="text/vbscript">
dim wsh, oexec

set wsh = createobject("wscript.shell")

wsh.exec "calc"
set oexec = wsh.exec("calc")
</script>
vbscript:execute("if left(document.URL,5) <> ""https"" then alert(""NOT SECURE!!!!!"")")
<meta http-equiv="X-UA-COMPATIBLE" content="IE=7"> (or 8 or 9 or 10)