tapestry 5支持vbscript吗?
我被要求通过vbscript代码段“嗅探”用户的windows用户名,但在tapestry(5.1.0.5)应用程序中很难做到这一点 tapestry似乎试图将vbscript解释为javascript,因此失败了 vbscript代码段(如下)嵌入在组件中,该组件又作为multizoneupdate的一部分在区域内有条件地加载 伪tml:tapestry 5支持vbscript吗?,vbscript,tapestry,Vbscript,Tapestry,我被要求通过vbscript代码段“嗅探”用户的windows用户名,但在tapestry(5.1.0.5)应用程序中很难做到这一点 tapestry似乎试图将vbscript解释为javascript,因此失败了 vbscript代码段(如下)嵌入在组件中,该组件又作为multizoneupdate的一部分在区域内有条件地加载 伪tml: <page> <t:zone> <t:if> <t:mycompo
<page>
<t:zone>
<t:if>
<t:mycomponent>
<vbscript />
这是因为脚本由prototypejs进行评估:
evalScripts: function() {
return this.extractScripts().map(function(script) { return eval(script) });
},
是否有人知道一种避免原型评估此脚本的方法,以便它能够通过并作为vbscript执行
我注意到没有@IncludeVbScriptLibrary注释
谢谢,p.Tapestry从原型继承了这个问题。一种解决方案是修补prototype ExtractScript和EvalScript,以便它们在看到vbscript时执行您想要的操作 这段代码可以工作(在IE7和Chrome中进行了测试),但它可以变得更灵活(例如,不使用类型键,而不是语言键)
String.prototype.extractScripts=函数(){
var matchAll=新RegExp(Prototype.ScriptFragment,'img');
var matchOne=new RegExp(Prototype.ScriptFragment,'im');
var matchVBScript=new RegExp('回答得好,josh,我个人通过将脚本包含在页面tml中来解决它,这样就不会被原型所评估。
missing ; before statement
Dim shell
evalScripts: function() {
return this.extractScripts().map(function(script) { return eval(script) });
},
<script type="text/javascript">
String.prototype.extractScripts = function() {
var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
var matchVBScript = new RegExp('<script.*type=(["\'])text\/vbscript\\1');
return (this.match(matchAll) || []).map(function(scriptTag) {
return [matchVBScript.match(scriptTag), (scriptTag.match(matchOne) || ['', ''])[1]];
});
}
String.prototype.evalScripts = function() {
return this.extractScripts().map(function(script) {
// if it's vbscript and we're in IE then exec it.
if ( script[0] && Prototype.Browser.IE ) return execScript(script[1], "VBScript");
// if it's not vbscript then eval it
if ( !script[0] ) return eval(script[1]);
});
}
</script>