通过 jQUery 创建沙盒 iFrame

Create sandboxed iFrame via jQUery

我正在尝试使用 jQuery 创建一个没有任何权限的 iFrame。 我可以添加 iFrame 属性,但它需要一个值。我通过添加空值 (' ') 使用脏解决方案,但这是正确的方法吗? 有没有更好的方法来创建无需许可的沙盒 iFrame?

$(function() {
  $('article').each(createIFrame);
});

function createIFrame() {
  setArticleContent($(this), 'hello sandbox');
}

function setArticleContent(article, content) {
  article.find('span>p').first().text('');
  $('<iframe>', {
    srcdoc: '<p>' + content + '</p>',
    frameborder: '0',
    sandbox: ' ',
    style: 'background:#00FF00',
  }).appendTo(article.find('span>p').first());
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<article>
  <span>
        <p>helloworld</p>
      </span>
</article>

I am using a dirty solution by adding an empty value (' ') but is this the right way?

一点也不脏,但是您应该注意,根据规范,您应该使用空字符串:

The value of the attribute can either be an empty string (all the restrictions are applied), or a space-separated list of tokens that lift particular restrictions

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox

$('<iframe>', {
  srcdoc: '<p>' + content + '</p>',
  frameborder: '0',
  sandbox: '', // note the space was removed
  style: 'background: #00FF00',
}).appendTo(article.find('span>p').first());

理想情况下 style 也应该通过外部样式表进行设置。