如何访问先前YUI.use()调用中定义的函数

时间:2011-06-23 15:38:34

标签: yui3

[我是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的沙箱机制,但这就是我在这里完成工作所需要的。)

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可能遇到问题,因为无论何时创建YUI()实例,它都会为您构建一个新的沙箱。除了少数例外,YUI模块完全按其沙箱上下文加框。例如:

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

如果它从未被分配到沙箱功能范围之外的变量,那么您很可能无法访问所需的{em>特定实例。theObject。如果该对象的任何实例都可以,您可以调用YUI API并使用自己的版本。

答案 2 :(得分: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