4

现在 Apple 的信用卡产品已经推出,我可以通过 Apple Pay 在网上购物获得 2% 的现金返还。不幸的是,我选择的浏览器是 Firefox,它还不支持 Apple Pay。

我想检测检查 Apple Pay 支持的尝试,因此我可以以某种方式提醒自己并切换 Safari 以完成我的购买。根据Apple 的文档,此检查是通过window.ApplePaySession.

因此,我在扩展中尝试了以下内容:

manifest.json

{
    "manifest_version": 2,
    "name": "applepay",
    "version": "1.0",
    "content_scripts": [
        {
            "matches": [
                "*://*/*"
            ],
            "js": [
                "applepay.js"
            ]
        }
    ]
}

applepay.js

window.ApplePaySession = {
    canMakePayments: function () {
        console.log('canMakePayments');
        return Promise.resolve(true);
    },
    canMakePaymentsWithActiveCard: function () {
        console.log('canMakePaymentsWithActiveCard');
        Promise.resolve(true);
    },
};

我能够进入console.log(window)applepay.js获取整个对象,但我对对象的更改似乎没有生效 - 它的行为就像window是只读的。我错过了什么?

4

1 回答 1

4

在 Firefox 中,内容脚本(用 WebExtensions 编写的插件)不与页面脚本(网站脚本)共享相同的上下文。

在您的内容脚本中,执行与此类似的操作:

function notify(message) {
   console.log("do something");
}

exportFunction(notify, window, {defineAs:'notify'});

之后,页面脚本将看到 window.notify 存在。

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Sharing_objects_with_page_scripts

于 2019-08-20T09:02:55.950 回答