Javascript TypeScript:IFrame沙盒属性未定义,DOMSettableTokenList没有构造函数

Javascript TypeScript:IFrame沙盒属性未定义,DOMSettableTokenList没有构造函数,javascript,iframe,typescript,sandbox,Javascript,Iframe,Typescript,Sandbox,我正在类型脚本中创建iFrame元素: var iFrameElement : HTMLIFrameElement = document.createElement("iframe"); iFrameElement.sandbox.add('allow-forms'); iFrameElement.sandbox.add('allow-scripts'); iFrameElement.sandbox.add('allow-same-origin'); 但是,沙盒属性未定义,因此此处的add(

我正在类型脚本中创建iFrame元素:

var iFrameElement : HTMLIFrameElement = document.createElement("iframe");
iFrameElement.sandbox.add('allow-forms');
iFrameElement.sandbox.add('allow-scripts'); 
iFrameElement.sandbox.add('allow-same-origin');
但是,沙盒属性未定义,因此此处的add(value:string)失败

我也不知道如何实例化沙盒属性,下面是lib.d.ts中定义的接口:

interface HTMLIFrameElement {
    sandbox: DOMSettableTokenList;
}
interface DOMSettableTokenList extends DOMTokenList {
    value: string;
}
interface DOMTokenList {
    length: number;
    contains(token: string): boolean;
    remove(token: string): void;
    toggle(token: string): boolean;
    add(token: string): void;
    item(index: number): string;
    [index: number]: string;
    toString(): string;
}
我在想,这里有一些语法我不知道如何使用,或者有一些其他技巧可以让它工作。我在这个网站和整个互联网上进行了广泛的搜索,但是结果并没有特别有用

不幸的是,答案在TypeScript中不起作用(类型“String”缺少类型“DOMSettableTokenList”中的属性“value”),这使我想将某些对象强制转换为该类型。我看到似乎已经重新实现了该类型,但现在对我来说这似乎太粗糙了


帮助我stackoverflow,你是我唯一的希望。

一般来说,如果你想了解一些特定于浏览器的实现,我建议你将(更改类型)转换为
任意
,这样你甚至可以编写:

(<any>iFrameElement).foo = "";
对于Chrome来说:

(<any>iFrameElement).sandbox = "allow-forms allow-scripts";
(iframelement).sandbox=“允许表单允许脚本”;

结果表明,在FireFox和IE11中,
sandbox
是一个
DOMSettableTokenList
并且您发布的代码应该可以工作(
sandbox
有一个
add()
方法)。但在Chrome中(这可能就是您正在使用的),
sandbox
是一个字符串。接口声明没有考虑到这一点。您可能希望尝试将接口更改为
sandbox:any如果此属性因浏览器而异
(<any>iFrameElement).sandbox = "allow-forms allow-scripts";