无法在WinJS应用程序中的HTML片段中显示base64编码图像

时间:2013-11-05 23:04:49

标签: iframe winjs winrt-async

我正在编写一个WinJS应用程序,它将用户复制到剪贴板的HTML片段替换为剪贴板

稍后,当我去显示.html时,我创建了一个iFrame元素(使用jQuery $(''),并尝试将.html源化为它,并获得以下错误

0x800c001c - JavaScript运行时错误:无法添加动态内容。脚本试图注入可能不安全的动态内容或先前动态修改的元素。例如,使用innerHTML属性添加脚本或格式错误的HTML将生成此异常。使用toStaticHTML方法过滤动态内容,或使用createElement等方法显式创建元素和属性。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=247104

如果我没有对图像进行base64编码,我就不会得到例外,即保持原样并且可以在页面上显示带有显示图像的页面的iframe。

如果我在修改了base64的url并将其运行到toStaticHTML之后获取了html,它会从标记中完全删除src =属性。

我知道带编码的png的.html是正确的b / c我可以在Chrome中打开它并显示正常。

我的问题是我正在试图找出为什么它从标签中剥离src =属性以及如何修复它,例如,创建iframe而不使用jquery和一些MS voodoo,或者使用不同的技术来消毒HTML?

2 个答案:

答案 0 :(得分:0)

因此,我发现的一种解决方案(不是100%确信它是最好的,而且仍在寻找一些特别少的M $)是MS Webview

http://msdn.microsoft.com/en-us/library/windows/apps/bg182879.aspx#WebView

我使用下面的代码(其中content是带有base64编码图像的html字符串)

        var loadHtmlSuccess = function (content) {
            var webview = document.createElement("x-ms-webview");
            webview.navigateToString(content);
            assetItem.append(webview);
        }

答案 1 :(得分:0)

我相信你想使用 execUnsafeLocalFunction 。例如:

  var target = document.getElementById('targetDIV');
  MSApp.execUnsafeLocalFunction(function () { 
       target.innerHTML = content}
  );