Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery构建Windows 8 Metro应用程序_Javascript_Jquery_Html_Windows 8_Microsoft Metro - Fatal编程技术网

Javascript 使用jQuery构建Windows 8 Metro应用程序

Javascript 使用jQuery构建Windows 8 Metro应用程序,javascript,jquery,html,windows-8,microsoft-metro,Javascript,Jquery,Html,Windows 8,Microsoft Metro,我刚刚开始使用HTML/JS进行Windows8开发。在过去的几个月里,我一直在专注于jQuery开发针对汽车主机和电视机的应用程序 跳进这一步,我想过渡会很简单。我对我的网站的设计和结构有了很大的了解,并希望遵循我以前工作中使用的一些做法 也就是说,我想创建一个单页应用程序。主default.html文件将包含顶部导航/标题和另一个div。另一个div将用于加载项目中所有其他页面、所有单独的html文件 所有全局函数和主要功能都将驻留在一个javascript文件application.js中

我刚刚开始使用HTML/JS进行Windows8开发。在过去的几个月里,我一直在专注于jQuery开发针对汽车主机和电视机的应用程序

跳进这一步,我想过渡会很简单。我对我的网站的设计和结构有了很大的了解,并希望遵循我以前工作中使用的一些做法

也就是说,我想创建一个单页应用程序。主default.html文件将包含顶部导航/标题和另一个div。另一个div将用于加载项目中所有其他页面、所有单独的html文件

所有全局函数和主要功能都将驻留在一个javascript文件application.js中。然后,任何特定于页面的javascript都将位于每个HTML文件的顶部

我很快意识到这是个问题。使用jQuery.load()在我的页面中加载会导致我的应用程序出现安全错误

JavaScript运行时错误:无法添加动态内容。脚本试图注入可能不安全的动态内容或以前动态修改的元素。例如,使用innerHTML属性添加脚本或格式错误的HTML将生成此异常。使用toStaticHTML方法过滤动态内容,或使用createElement等方法显式创建元素和属性

我真的希望避免学习一些微软特有的东西。我认为他们提供了很多工具和其他工具是很好的,也许我只是没有充分使用它们,但是对于我和我正在尝试做的或者已经可以用jQuery完成的事情来说,一切都太僵化了。我是一个喜欢确切地知道发生了什么并完全控制它的人

同时查看模板和示例项目,我真的不喜欢所有重复的代码。例如,每个HTML文件都声明了所有相同的引用。我只想写一次我的引用和部分,比如我的标题栏,而不必在我的项目中复制/粘贴这些代码

有没有一种方法可以像我希望的那样去做事情,并创建一个单页应用程序?它们是否有自己的jQuery.load()替代品

任何能为我指明正确方向的帮助都将不胜感激

2012年8月14日编辑:

我已尝试使用此问题中的修复:

这消除了安全警告,我可以使用jQuery.load()加载HTML。然而,看看DOM explorer,我的HTML正在从脚本中剥离


我还尝试将.load()调用包装到MSApp.execUnsafeLocalFunction()中,但我的文件仍然会被剥离所有脚本。给出了什么?

根据您的应用程序,如果您不打算访问任何WinRT组件,您可以将页面导航到ms appx web,这将更改页面周围的安全策略,但您不能在启动时指定。您必须进行导航,并利用新的securyt上下文


另一个选项是使用msWWA.execUnsafeLocalFunction函数包装对JQuery的调用,这将使所有不安全的代码能够被推入DOM中,只需更改引起错误的JQuery行即可修复

jQuery-1.8.0,第5566行:

    append: function () {
        return this.domManip(arguments, true, function (elem) {
            if (this.nodeType === 1 || this.nodeType === 11) {
                self.appendChild(elem);  // problem line
            }
        });
    },
改为:

    append: function () {
        return this.domManip(arguments, true, function (elem) {
            if (this.nodeType === 1 || this.nodeType === 11) {
                var self = this;
                MSApp.execUnsafeLocalFunction(function () {
                    self.appendChild(elem);
                });
            }
        });
    },
有一种“正式”的方式来做你想做的事。
提供WinJS.Navigation以支持“单页应用程序”。例如,
default.html
将包含一个标记,该标记表示动态加载的页面内容的去向:

<div id="contenthost" 
    data-win-control="Application.PageControlNavigator" 
    data-win-options="{home: '/pages/home/home.html'}">
</div>

诚然,它不是jQuery,但它工作得很好:)

+1要提醒jQuery加载在windows 8中可能是“不允许的”,请立即查看此问题的答案!可能重复,该问题的答案可能会有所帮助。已尝试该修复。我再也没有收到错误,但是我的页面上加载的脚本仍然无法执行。这些脚本是如何在文档中结束的?如果在调用load之后查看inDOM explorer,它们是否已被注入?可能与我在execUnsafeLocalFunction中包装jQuery.load()的内容重复,但仍然没有成功。查看DOM资源管理器,我在该页面上的脚本已被剥离。您是否在JQuery中的代码插入了脚本?怎么了?我想这是我唯一的路线了。现在我已经习惯了,情况还不错。
WinJS.Navigation.nav("/pages/other/page.html");