簡體   English   中英

GWT Javascript注入和JSNI

[英]GWT Javascript Injection and JSNI

如何在JSNI代碼中使用Javascript庫(從CDN下載)?

例如,我想從這個JSNI方法中調用javascript Stripe方法:

    private native void contactStripe(String creditCard, String cvc, String expiryMonth, String expiryYear) /*-{
        $wnd.Stripe.setPublishableKey('my_stripe_publishable_key');
        $wnd.Stripe.createToken({
            number: creditCard,
            cvc: cvc,
            exp_month: expiryMonth,
            exp_year: expiryYear
        }, callBack);
    }-*/;

...但Stripe javascript方法未定義。

(更多關於Stripe.createToken方法https://stripe.com/docs/tutorials/forms#create-a-single-use-token

使用CDN網址注入Stripe javascript文件:

ScriptInjector.fromUrl("https://js.stripe.com/v1/").setCallback(
    new Callback<Void, Exception>() {
    public void onFailure(Exception reason) {
    }
    public void onSuccess(Void result) {
        contactStripe("0000111122223333", "456", "04", "2014");
    }
}).inject();

如果您希望以一種可以通過$wnd setWindow訪問它定義的全局變量的方式注入JS腳本,則必須設置setWindow ( ScriptInjector.TOP_WINDOW )

嘗試將您的代碼更改為:

private native void contactStripe(String creditCard, String cvc, String expiryMonth, String expiryYear) /*-{

    console.log($wnd.Stripe);             // Should log 'Object'
    console.log($wnd.Stripe.createToken); // should log function
    var obj = {
        number: creditCard,
        cvc: cvc,
        exp_month: expiryMonth,
        exp_year: expiryYear
    };
    consloe.log(obj);                     // Should be 'Object'
    $wnd.Stripe.createToken(obj, callBack);
}-*/; 

如果使用chrome調試工具,則可以檢查所有這些對象。

更新您不提供回調。 那是你的問題嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM