在 Cordova 应用程序(使用 jQuery Mobile)上更改页面在 Windows 上出现安全问题

Changing pages on Cordova app (with jQuery Mobile) giving security issues on Windows

相关文章:Using jQuery with Windows 8 Metro JavaScript App causes security error


使用 jQuery 1.8.2 和 jQuery 移动版 1.3.0

我目前正在为 IOS、Android 和 Windows 开发 Cordova 应用程序。我目前正在开发 Windows 版本,但似乎遇到了无法通过 innerHtmlouterHtml 添加内容的问题。

至于错误,我得到这个:

HTML1701: Unable to add dynamic content ' a' A script attempted to inject dynamic content, or elements previously modified dynamically, that might be unsafe. For example, using the innerHTML property to add script or malformed HTML will generate this exception. Use the toStaticHTML method to filter dynamic content, or explicitly create elements and attributes with a method such as createElement. For more information, see http://go.microsoft.com/fwlink/?LinkID=247104.

我找到了一些解决这个问题的方法,问题似乎是 Windows 不喜欢你通过 innerHtml 或 outerHtml 调整内容,但希望你做不同的事情。

这里的第一个问题是我有如下代码:

$.mobile.changePage(
  "#loginPage", {
      changeHash: "false"
  }
);

基本上这会将我的页面更改为 ID loginPage。 changePage 将使用 innerHtml,因此我无法访问它。

我尝试过的一个解决方案是用一条规则包装我的代码,基本上说:你必须知道你在做什么,所以我会为你忽略那个错误!

MSApp.execUnsafeLocalFunction(function () {
    $.mobile.changePage(
      "#loginPage", {
          changeHash: "false"
      }
    );
});

这行得通,耶!还是不行?
似乎有超过 35 个页面更改,应用程序将在每个页面上崩溃,除非我将 MSApp.execUnsafeLocalFunction() 包裹在它们周围。但我不会那样做。

另一个应该有效的解决方案是调整 jQuery 库文件。此处解释了完整的详细信息:Windows 8 using jquery for app development。这里的问题是它根本不起作用。我调整了每条规则(断言块、assertUsableName 函数和 jQuery.support 函数),但它似乎不起作用。

所以目前,我没有技巧了。希望有人能帮我解决这个问题。
如果需要,我会提供更多代码。

好吧我自己想出来了,这真的很愚蠢。好的。

我做了所有正确的事情,并通过在 jQuery 内的每个 innerHtml 周围包装 MSApp.execUnsafeLocalFunction() 来修补 jQuery 文件。由于我使用的是 jQuery 移动版,因此我还修补了 jquery.mobile.js 文件。

我的问题是我编辑了错误的 jquery 文件。由于我在 Visual Studio 中导入了现有项目,因此 jQuery 文件已添加到我的 /www/js/lib/jquery-mobile/ 中,而我正在查看 /www/jquery-mobile/.

但补丁确实有效,对我来说太好了!