IBM Worklight - 如何绕过WP"无法添加动态内容"警告?

时间:2014-03-12 17:47:40

标签: sencha-touch windows-phone ibm-mobilefirst

我曾尝试在Worklight中运行用Sencha Touch编写的Windows Phone 8应用程序。我用以下方式使用了sencha:

        <script src="//Microsoft.WinJS.1.0/js/base.js"></script><script src="//Microsoft.WinJS.1.0/js/ui.js"></script><script>
    // Define WL namespace.
    var WL = WL ? WL : {};
    /**
     * WLClient configuration variables.
     * Values are injected by the deployer that packs the gadget.
     */
    WL.StaticAppProps = {
            "APP_DISPLAY_NAME": "Cockpit",


"APP_ID": "Cockpit",
   "APP_SERVICES_URL": "http:\/\/192.168.99.11:10080\/CockpitProj\/apps\/services\/",
   "APP_VERSION": "1.2.1",
   "ENVIRONMENT": "windows8",
   "LOGIN_DISPLAY_TYPE": "embedded",
   "WORKLIGHT_PLATFORM_VERSION": "6.1.0.00.20131219-1900",
   "WORKLIGHT_ROOT_URL": "http:\/\/192.168.99.11:10080\/CockpitProj\/apps\/services\/api\/Cockpit\/windows8\/"
};</script>
        <script src="worklight/cordova.js"></script>
        <script src="worklight/wljq.js"></script>
        <script src="worklight/worklight.js"></script>
    </head>
    <body>
        <div class="loadingSpinner bigLoad" id="appLoadingIndicator"></div>
        <script src="js/initOptions.js" type="text/javascript"></script>
        <script src="js/sencha-touch-all.js" type="text/javascript"></script>
        <script src="js/app.js" type="text/javascript"></script>
        <script src="js/messages.js" type="text/javascript"></script>
    </body>
</html>

如果我运行此代码,我会得到一个例外:

  

无法添加动态内容。脚本试图注入动态   内容或以前可能动态修改的元素   不安全的。例如,使用innerHTML属性添加脚本或   格式错误的HTML将生成此异常。使用toStaticHTML   过滤动态内容或显式创建元素的方法   使用createElement等方法的属性。欲获得更多信息,   见http://go.microsoft.com/fwlink/?LinkID=247104

这可以通过sencha-touch-all中的每个sencha调用来解决。

MSApp.execUnsafeLocalFunction(function () {}

这只能是一种解决方法,因为这些sencha调用太多了。

使用Sencha for Windows Phone的一般概念是什么? these steps from Phonegap:

1 个答案:

答案 0 :(得分:1)

IMO在Windows Phone开发中没有好办法。如果它是纯粹的Cordova应用程序或基于Worklight的应用程序并不重要。

请参阅以下讨论中的第二个选项。也许您可以将其设置为适用于您的应用所需的所有代码部分:

复制粘贴:

  

主机强制执行代码将抛出一个访问被拒绝的异常   您尝试设置innerHTML(和outerHTML以及其中一些)的事件   HTML的一个元素,它不符合白名单   已知安全的HTML。您可以通过以下几种方式解决这个问题:

     
      
  1. 首先在你的字符串上调用toStaticHTML(),它应该删除所有不允许的内容

  2.   
  3. 使用WinJS.Utilities.setInnerHTMLUnsafe(element, text),这样您就可以将innerHTML设置为您喜欢的任何内容

  4.   
  5. 使用msWWA.execUnsafeLocalFunction,例如:

         

    msWWA.execUnsafeLocalFunction(function(){element.innerHTML = text;})

  6.         

    选项2以3实施。请注意,如果设置   你不能控制的html元素的innerHTML(例如某些东西   你下载了像RSS feed一样的网页,它可能包含脚本   这将是能够访问WinRT并做坏事的原因   2)和3)中的函数名称是有目的的   吓人。