我正在写一些javascript,需要在SVG或VML之间进行选择(或两者兼而有之,它是一个奇怪的世界).虽然我知道目前只有IE支持VML,但我更倾向于检测功能而不是平台.
SVG似乎有一些属性,你可以去:例如window.SVGAngle.
这是检查SVG支持的最佳方法吗?
VML有任何等价物吗?
不幸的是 - 在firefox中,我可以非常愉快地在VML中完成所有渲染而不会出现错误 - 屏幕上没有任何反应.从脚本中检测出这种情况非常困难.
挑战在于确定是否以可靠和正确的方式在IIS7中启用了ASP.NET.
在这种情况下,通过以下方式完成启用/禁用:
Server Manager ->
Roles ->
Web Server (IIS) ->
Remove Role Services ->
Remove ASP.NET
Run Code Online (Sandbox Code Playgroud)
确定这个的自然位置应该在applicationHost.config文件中.但是,在启用或禁用ASP.NET的情况下,我们仍然可以使用"ManagedEngine"模块,并且我们仍然在标记中包含isapi过滤器记录.
我现在能找到的最好的方法是检查<isapiCgiRestriction>标签是否包含aspnet_isapi.dll,或者ASPNET跟踪提供程序是否可用.
但是,这些并没有直接检测到ASP.NET配置的存在,只是可以想象由用户重新配置的副作用.
如果可能的话,我宁愿通过检查IIS配置/设置而不是操作系统本身来做到这一点,尽管如果我们可以保证在使用IIS7时这种技术始终可用,则可以接受服务器上的角色和服务.
更新
谢谢你的回复.清楚地说明我想要做什么,我将服务器配置中各种位置的设置拉到一个(只读)视图中,以显示用户需要配置什么才能使软件工作.
我需要引入的一个设置就是这个:

用红色突出显示的那个.
我不需要操纵设置,只需重现它.我想看看用户在将IIS角色添加到服务器时是否检查了ASP.NET框,因为在这个示例中他们显然没有.
我想通过在IIS中查看可靠的东西而不是枚举角色服务来做到这一点,因为我不想在我不需要的检查上添加任何特定于平台的依赖项.我不知道是否有可能在没有角色/服务基础架构的服务器上安装IIS7,但在优先考虑中,我宁愿不担心它.我还有一堆用于在IIS周围进行清理的库.
但是,我也很难找到如何枚举角色/服务,所以如果有一个解决方案涉及这样做,它肯定会有用,并且比检查拥有ASPNET跟踪提供程序的副作用要好得多躺在身边.
不幸的是,如果你不检查ASP.NET按钮,你仍然可以在IIS applicationHost.config文件中获取ManagedEngine模块,因此它不是一个可靠的检查.您还可以将ASP.NET映射为isapi过滤器,因此检查它们是不够的.在安装ASP.NET但已被删除的情况下,这些问题尤其成问题.
看起来最好的解决方案是检查角色服务.但是,关于此的API信息看起来非常罕见,因此请求帮助.
我正在使用以下代码尝试以编程方式允许NetworkService帐户访问密钥:
var RSA = new RSACryptoServiceProvider(
new CspParameters() {
KeyContainerName = "MyEncryptionKey",
Flags = CspProviderFlags.UseExistingKey | CspProviderFlags.UseMachineKeyStore
});
RSA.CspKeyContainerInfo.CryptoKeySecurity.AddAccessRule(
new System.Security.AccessControl.CryptoKeyAccessRule(
new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null),
CryptoKeyRights.GenericAll,
AccessControlType.Allow
)
);
Run Code Online (Sandbox Code Playgroud)
此代码运行时没有错误,但对密钥容器的权限没有影响.
但是,使用命令行工具aspnet_regiis做同样的事情,完美地工作:
aspnet_regiis -pa "MyEncryptionKey" "NetworkService"
Run Code Online (Sandbox Code Playgroud)
我正在运行完全管理员权限 - 如果我没有运行这些权限,则抛出异常.我也是最初创建密钥的用户.
密钥容器始终具有以下访问规则:
S-1-5-18 -> LocalSystem
S-1-5-32-544 -> Administrators
S-1-5-5-0-135377 -> MyUser
Run Code Online (Sandbox Code Playgroud)
使用aspnet_regiis,SID,S-1-5-20将添加到此列表中.我无法从代码中影响它.
我已经尝试以字符串格式从sid创建安全标识符,以及使用SetAccessRule而不是AddAccessRule.
任何想法如何从代码实际影响此ACL列表?
我遇到了一般IE兼容性的异常情况.
以下链接在IE中无法点击,但其他一切都很好(我已经尝试过IE8):
<a href="http://bbc.co.uk"><label>text</label></a>
Run Code Online (Sandbox Code Playgroud)
虽然上述方法不起作用,但交换div或span的标签是可以的.
是否有任何明智的方法使这种标记样式在IE中工作的变化很小.如果可能的话,我想保留标签.