【发布时间】:2012-06-07 05:46:15
【问题描述】:
因为它听起来像jQuery was an option for Metro JavaScript apps,我开始期待 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>
不幸的是,一旦我运行生成的应用程序,它就会抛出一个控制台错误:
HTML1701:无法添加动态内容“a”脚本试图注入动态内容,或者 以前动态修改的元素,这可能是不安全的。为了 例如,使用 innerHTML 属性添加脚本或格式错误的 HTML 会产生这个异常。使用 toStaticHTML 方法进行过滤 动态内容,或显式创建元素和属性 方法,例如 createElement。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=247104.
我在非缩小版的 jQuery 中打了一个断点,发现 the offending line:
div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
显然,Metro 应用程序的安全模型forbids creating elements this way。这个错误不会给用户带来任何直接的问题,但考虑到它的位置,我担心它会导致 jQuery 中的功能发现测试失败,这是不应该的。
我绝对想要 jQuery $.Deferred 让一切变得更容易。我希望能够使用选择器引擎和事件处理系统,但如果必须的话,我宁愿不用它们。
如何让最新的 jQuery 与 Metro 开发完美配合?
【问题讨论】:
-
你是通过cdn加载jquery吗?
-
没有。这是本地 jQuery 代码执行中触发的错误。
-
顺便说一句,看起来我可以学习 new promise system 而不是 jQuery 的
$.Deferred。 -
jQuery 1.8 需要另外两项修改才能完美地与 Windows 8 一起工作。我写了一个Blogpost,其中涵盖了必要的更改,提供了一些背景信息并提供了 jQuery 1.8 的“修补”版本。
-
这是在 Windows 8 上使用 jQuery 的好资源:incloud.de/2012/08/windows-8-using-jquery-for-app-development
标签: jquery microsoft-metro winjs visual-studio-2012