在单独的js文件中访问web配置
Access web config in a separate js file
我需要从js文件中读取一个web配置键值。我知道我们可以在aspx文件中定义一个变量,并用下面的表达式初始化它,然后在js文件中访问这个变量。js文件实际上是站点中引用的自定义dll的一部分
<script type="text/javascript" language="javascript">
var CMSPopupAutoSize =
'<%=Convert.ToString(
ConfigurationManager.AppSettings["FP:CMSPopupAutoSize"]) %>';
</script>
但我的要求是,我必须从js内部读取配置文件。我不需要对现有的网站页面进行任何更改。这是一种向后兼容性要求。我在这里发现了一些相关的东西http://forums.asp.net/t/1117176.aspx但无济于事。
这是不可能的,因为JS在被请求时不会被服务器处理,而只是在响应中发送回来。不过,您可以创建一个呈现JS文件的ashx处理程序。
因此,我们的想法是在服务器上有一个"几乎是javascript"的文件。这个文件是一个特殊的文件,主要包含JS,但也包含一些服务器变量。你只需要决定这些变量的格式(例如##APP_CMSPopupAutoSize##
)。
然后,您必须开发一个处理程序(ashx
文件)来对该文件执行服务器端处理。处理程序只需读取文件,识别变量,并将其替换为来自web配置、数据库的值,无论您希望在哪里。处理程序最终会将修改后的字符串呈现为javascript文件。
基本上,在HTML代码中,您只需要以这种方式调用处理程序:
<script src="/pathToHandler/myHandler.ashx"></script>
如果我没有记错的话,微软通过WebResource.axd
处理程序实现了这种类型的"服务器端预处理JS"。
希望这能帮助。。。
我很确定您不能直接从JS访问web.config。
在您的示例中,您从web.config-settings中预加载了一个值(CMSPopupAutoSize
)。您是否可以不做类似的操作,而是使用列表或字典,或一些类似的结构?
这可能是一个稍微混乱的解决方案,但应该允许您以稍微更动态的方式获取几个配置值,即不需要将每个特定键映射到页面中。
更新 (部分参考下面的评论):如果你不能更改页面本身的任何内容,也许你可以创建一些其他服务器端资源(另一个页面,或者只是一个生成的公开文本文件?),JS可以从中读取?在任何情况下,您都必须找到一些方法来公开您的Config值,以便JS可以读取它们。
能够直接从JS访问配置文件(或任何其他服务器端文件)可能会构成严重的安全威胁。
客户端脚本无法直接访问web.config。创建一个HttpHandler,从javascript调用if,并通过处理程序读取web.config。
- 我如何设置HTTP头“;访问控制允许起源”;用于来自thttpd web服务器的HTTP响应
- 无法使用javascript客户端访问远程web服务
- 从本地HTML / JavaScript(没有Web服务器)访问Google API
- “无法下载此文件”时尝试在主屏幕Web应用程序中访问ics文件
- 从Web服务访问JSON响应
- 在单独的js文件中访问web配置
- 如何通过AngularJS$http从ASP.Net Web API 2获取访问令牌
- Selenium Web驱动程序访问Jquery中的Javascript全局变量
- AngularJS - 访问 Web 应用中的顶级控制器范围
- 如何从Javascript或PHP访问web服务
- 如何在javascript或jquery中访问Web服务返回的JSON中的数据
- 如何访问 Web worker 中的变量
- angularjs通过服务访问web api
- 如何在Tomcat服务器中使用HTML访问/WEB-INF中的文件?
- 不能使用XMLHttpRequest访问Web API方法,但使用Restclient Plugin等
- 407需要代理身份验证(Forefront TMG需要授权才能完成请求.拒绝访问Web代理筛选器)
- 无法从Javascript访问web方法
- web服务-在firefox中使用javascript访问web服务时出现问题
- 阻止在包装器应用程序之外访问 Web 应用程序
- 在2个html5页面之间访问web SQL数据库