GWT Javascript注入和JSNI

spg*_*spg 3 javascript gwt jsni stripe-payments

如何在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);
    }-*/;
Run Code Online (Sandbox Code Playgroud)

...但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();
Run Code Online (Sandbox Code Playgroud)

Tho*_*yer 9

如果您希望以一种可以访问它定义的全局变量的方式注入JS脚本$wnd,那么您必须这样做.setWindow(ScriptInjector.TOP_WINDOW)