2

【YUI初心者です】

YUI3 フレームワークを使用して作成された Web ページのコンテンツを変更する必要がある Chrome 拡張機能を作成しています。

ページが読み込まれた後に実行される 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

YUI() インスタンスが作成されるたびに、新しいサンドボックスが構築されるため、問題が発生する可能性があります。いくつかの例外を除いて、YUI モジュールはサンドボックス コンテキストによって完全にボックス化されています。例えば:

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

サンドボックス関数のスコープ外の変数に割り当てられていない場合、必要な特定のインスタンスにアクセスできない可能性が非常に高くなります。theObjecttheObject のインスタンスがあれば、YUI API を呼び出すだけで、独自のバージョンを取得して操作できます。

于 2011-07-07T17:42:12.297 に答える
1

これは私にとってはうまくいきます:http://jsfiddle.net/sMAQx/1/

于 2011-07-01T23:25:53.577 に答える
0

これを行う 1 つの方法は、「使用」した後に 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 に答える