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