GWT Javascript注入和JSNI

GWT Javascript注入和JSNI,javascript,gwt,jsni,stripe-payments,Javascript,Gwt,Jsni,Stripe Payments,如何在JSNI代码中使用Javascript库(从CDN下载) 例如,我想从这个JSNI方法中调用javascript条带方法: private native void contactStripe(String creditCard, String cvc, String expiryMonth, String expiryYear) /*-{ $wnd.Stripe.setPublishableKey('my_stripe_publishable_key');

如何在JSNI代码中使用Javascript库(从CDN下载)

例如,我想从这个JSNI方法中调用javascript条带方法:

    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);
    }-*/;
。。。但是stripejavascript方法尚未定义

(有关Stripe.createToken方法的详细信息)

使用CDN url注入条带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();
ScriptInjector.fromUrl(“https://js.stripe.com/v1/)setCallback(
新回调函数(){
公共失效失效失效(异常原因){
}
成功时公开作废(作废结果){
contactStripe(“000011112223333”、“456”、“04”、“2014”);
}
}).inject();

尝试将代码更改为:

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调试工具,可以检查所有这些对象

更新
您不提供回调。这是您的问题吗?

如果您希望JS脚本以一种可以通过
$wnd
访问它定义的全局变量的方式注入,那么您必须

console.log($wnd.Stripe.createToken);函数(t,n,n,r)函数(t,n,n,r)函数(t,n,r)函数(t,n,r)函数(t,n,n,r)函数(t,n,n,n,r)函数(t,n,r)函数(t,n,n,n,n,o;n;n;n;n;n;n;若,(t)t)扔“卡”卡”卡要求;若(t)扔“卡”卡”扔“卡”卡”卡无效无效;若(t,n,n,n,n,n,n,n,n,n,n,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,n,n,r,n,n,n,r,r,r,n,r,r,r,r,r,r,r,r,r,n,r,r,r,r,r,r,r,r,r,r,,e.ajaxJSONP({url:“+e.endpoint+”/tokens”,data:n,method:“POST”,success:function(e,t){return typeof r==“function”?r(t,e):void 0},complete:e.complete(r),timeout:4e4})}consloye.log(obj);logs对象{number:“000011122223333”,cvc:“456”,exp month:“04”,exp_year:“2014”}我试过这个代码:
stripeCallback=function(状态,响应){console.log(status);console.log(response)}console.log($wnd.Stripe);//应该记录'Object'console.log($wnd.Stripe.createToken);//应该记录函数var obj={number:“2013”,cvc:2,exp_月:3,exp_年:“lol”};console.log(obj);//应该是'Object'$wnd.Stripe.createToken(obj,stripeCallback);
但它不起作用我尝试了你的解决方案,脚本被注入了。当我调用$wnd.console.log($wnd.Stripe.createToken)时,整个函数的代码都被记录下来了,所以我相信脚本被很好地注入了。但是,调用$wnd.Stripe.createToken方法时我遇到了问题:在代码中,
callBack
是什么?(
createToken
的第二个参数)提示:不管它是什么,在传递给
createToken
时,请将它包装在$entry()中(在JSNI文档中搜索
$entry
)回调是一个Javascript函数,它接受两个参数:callback=function(status,response){/…}明白了!在调用API之前我忘了设置m Stripe公钥:$wnd.Stripe.setPublishableKey('pk_test_Iykwiy5scfpcnxfyxxys0msqz');您的修复也是必要的,没有设置窗口(ScriptInjector.TOP_WINDOW)打电话,我会得到一个com.google.gwt.core.client.JavaScriptException。非常感谢你,伙计!