javascript – TypeScript:IFrame沙箱属性未定义,DOMSettableTokenList没有构造函数

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

var iFrameElement : HTMLIFrameElement = document.createElement("iframe");
iFrameElement.sandbox.add('allow-forms');
iFrameElement.sandbox.add('allow-scripts'); 
iFrameElement.sandbox.add('allow-same-origin');

但是,sandbox属性未定义,因此add(value:string)此处失败.

我无法弄清楚如何实例化sandbox属性,这里是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;
}

我认为只有一些语法我不知道如何在这里使用,或者还有其他一些技巧可以使这个工作.我在这个网站和互联网上广泛搜索,但结果并不是特别有帮助.

不幸的是,答案here在TypeScript中不起作用(类型’String’是从’DOMSettableTokenList’类型中缺少属性’value’),这使我想要将某个对象强制转换为该类型.我看到this guy似乎重新实现了这种类型,但现在这对我来说似乎太过苛刻了.

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

最佳答案 一般来说,如果您正在计算某些特定于浏览器的实现,我建议您将(更改类型)转换为任何实现,这样您甚至可以编写:

(<any>iFrameElement).foo = "";

…但是要在代码中加入一些代码.

这将允许您将其用于IE:

iFrameElement.sandbox.add('allow-forms');
iFrameElement.sandbox.add('allow-scripts');

这适用于Chrome:

(<any>iFrameElement).sandbox = "allow-forms allow-scripts";
点赞