2

[我是YUI新手]

我正在编写一个 Chrome 扩展程序,它需要更改使用 YUI3 框架创建的网页的内容。

我已经确定,在页面加载后注入在页面中运行的 javascript 的扩展程序必须调用之前在 YUI.add() 调用中定义的函数。

运行的原始 YUI 代码是这样的:

YUI.add("uuu", function (c) {
    ...
    c.theObject = niceStuff;
}
...
YUI().use("uuu", function (c) {
    c.theObject.doSomething();
}

这段代码运行后是否有可能访问c.theObject的函数?

(我知道这可能会违背 YUI3 的沙盒机制,但这是我在这里完成工作所需要的)。

4

3 回答 3

1

这对我有用:http: //jsfiddle.net/sMAQx/1/

于 2011-07-01T23:25:53.577 回答
1

您可能会遇到问题,因为每次创建 YUI() 实例时,它都会为您构建一个新的沙箱。除了少数例外,YUI 模块完全被它们的沙箱上下文装箱。例如:

YUI().use('node', function(Y1) {
    YUI().use('node', function(Y2) {
        assert(Y1.Node === Y2.Node) // fails!
    });
});

如果从未将其分配给沙盒函数范围之外的变量,您很可能无法访问所需的特定实例。theObject如果对象的任何实例都可以,您只需调用 YUI API 并获取您自己的版本即可使用。

于 2011-07-07T17:42:12.297 回答
0

一种方法是在“使用”后捕获 YUI() 实例。像这样:

YUI().add("uuu", function (c) {
    c.theObject = 'foo';
})

var yInstance = YUI().use("uuu", function (c) {
    c.theObject = 'booyaa';
})

yInstance.use('uuu',function(c){
console.log(c.theObject)
})
    // booyaa
于 2012-01-07T19:47:58.230 回答