-1

Web サイトには次のコードがあります。

    var Items = {
        drop: function (a, b, d) {
            if (!(typeof a == "undefined" || typeof sockets[a.id] == "undefined")) {
                SSocket.send(sockets[a.id], {
                    action: "item_drop",
                    data: {
                        id: d
                    }
                });
                Inventory.add(a, d)
            }
        },
        give_to_player: function (a, b) {
            Items.drop(a, void 0, b)
        },
        take_from_player: function (a, b) {
            var d = clients[a];
            Inventory.remove(d, b);
            Player.send_inventory(d.id)
        },
    };

ユーザースクリプトを使用して、give_to_player プロパティを独自の関数に置き換えようとしています。しかし、そうするのは運が悪いです。私は JavaScript インジェクションと変数スコープに精通しています。

私は次のことを試しました:

Object.defineProperty(window.Item, 'give_to_player', {
    value:
        function(a,b){
            console.log('Change occured');
        }
});

これによりエラーは発生しませんが、変更は反映されず、コンソールは空のままです。Object.defineProperties も試してみましたが、うまくいきませんでした。

最後に、次のコードは結果を生成できませんでした:

window.Item.give_to_player = function(a,b){ console.log('Change occured');};

誰か提案はありますか?

Chrome を使用してユーザー スクリプトを実行しています。

4

2 に答える 2

1

The second method would work if you change the name to Items with a s and drop the window in the method to just Items.give_to_player = function(a,b){ console.log('Change occured');};.

EDIT: the var in var Items makes the method not accessible thru the window scope. if the var was dropped this window.Items.give_to_player won't throw error but since its there you'll not need to use the window in front of Items.(if that makes sense)

JSFIDDLE

side note: your error

window.Items.give_to_player = function(a,b){ console.log('Change occured');};

// Uncaught TypeError: Cannot set property 'give_to_player' of undefined 
于 2013-10-09T01:00:25.497 に答える