由于听起来jQuery是Metro JavaScript应用程序的一个选项,我开始期待Windows 8开发.我安装了Visual Studio 2012 Express RC并启动了一个新项目(空模板和网格模板都有同样的问题).
我制作了jQuery 1.7.2的本地副本,并将其添加为脚本参考.
<!-- SomeTestApp references -->
<link href="/css/default.css" rel="stylesheet" />
<script src="/js/jquery-1.7.2.js"></script>
<script src="/js/default.js"></script>
Run Code Online (Sandbox Code Playgroud)
不幸的是,只要我运行生成的应用程序,它就会抛出一个控制台错误:
HTML1701:无法添加动态内容'a'脚本试图注入可能不安全的动态内容或先前动态修改的元素.例如,使用innerHTML属性添加脚本或格式错误的HTML将生成此异常.使用toStaticHTML方法过滤动态内容,或使用createElement等方法显式创建元素和属性.有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=247104.
我在一个非缩小版本的jQuery中打了一个断点,发现了令人讨厌的行:
div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
Run Code Online (Sandbox Code Playgroud)
显然,Metro应用程序的安全模型禁止以这种方式创建元素.此错误不会对用户造成任何直接问题,但考虑到其位置,我担心它会导致jQuery中的功能发现测试失败,而不应该.
我绝对希望jQuery $.Deferred能让所有事情变得更轻松.我宁愿能够使用选择器引擎和事件处理系统,但如果必须的话我会没有它们.
如何让最新的jQuery与Metro开发很好地配合?