Javascript 解码/调试stripe.js:属性的值';条纹';为null或未定义,不是函数对象

Javascript 解码/调试stripe.js:属性的值';条纹';为null或未定义,不是函数对象,javascript,wxpython,stripe-payments,wxwidgets,Javascript,Wxpython,Stripe Payments,Wxwidgets,我正在遵循stripe服务器集成指南。我的服务器创建条带会话,并返回: <HTML lang=en><HEAD><TITLE>Payments</TITLE></HEAD> <BODY> <H1>Loading.....</H1> loading stripe <SCRIPT src="https://js.stripe.com/v3/"></SCRIPT> done load

我正在遵循stripe服务器集成指南。我的服务器创建条带会话,并返回:

<HTML lang=en><HEAD><TITLE>Payments</TITLE></HEAD>
<BODY>
<H1>Loading.....</H1>
loading stripe
<SCRIPT src="https://js.stripe.com/v3/"></SCRIPT>
done loading stripe
<SCRIPT type=text/javascript>
try {
    document.writeln('creating Stripe object');
    // error occurs here, Stripe is undefined
    var stripe = Stripe('<PUBLIC KEY GOES HERE>');
    document.writeln('redirecting to checkout');
    stripe.redirectToCheckout({
        sessionId: '<SESSION ID GOES HERE>'
    }).then(function (result) {
    });
    document.writeln('done calling javascript');
}
catch(error) {
    document.writeln('error occurred: ' + error.message);
}
</SCRIPT>
<H1>....DONE</H1></BODY></HTML>    

这可能与IE兼容性有关吗?我不确定,当我在IE中导航到url时,它会起作用,而且他们都使用trident引擎-我可以在提供脚本之前编辑脚本。我只是不知道是什么导致Stripe未定义。嗯,听起来好像在执行javascript之前没有加载Stripe.js脚本。如果你把你的条带代码放在一个窗口里会有什么区别吗:load listener()@duck在条带加载并得到相同结果后,我更改了代码以运行重定向功能(在firefox上工作,在模拟浏览器上失败)@user2682863,注册表中有一个IE兼容性的项(不幸的是,我不记得在哪里和做了什么——只是用谷歌搜索一下)。我认为需要将其设置为11(最高)。看看这是否有区别。这可能与IE兼容性有关吗?我不确定,当我在IE中导航到url时,它会起作用,而且他们都使用trident引擎-我可以在提供脚本之前编辑脚本。我只是不知道是什么导致Stripe未定义。嗯,听起来Stripe.js脚本以前没有加载过执行你的javascript。如果你把你的条带代码放在一个窗口里会有什么区别吗:load listener()@duck在加载条带并得到相同的结果后,我更改了代码以运行重定向功能(在firefox上工作,在模拟浏览器上失败)@user2682863,注册表中有一个IE兼容性项(不幸的是,我不记得在哪里和做了什么——只是用谷歌搜索一下)。我认为需要将它设置为11(最高)。看看它是否有区别。
import wx, traceback
from wx.html2 import WebView, EVT_WEBVIEW_ERROR, EVT_WEBVIEW_LOADED, EVT_WEBVIEW_NAVIGATING, EVT_WEBVIEW_NEWWINDOW, \
    WEBVIEWIE_EMU_IE11

html = """<HTML lang=en><HEAD><TITLE>Payments</TITLE></HEAD>
<BODY>
<H1>Loading.....</H1>
loading stripe
<SCRIPT src="https://js.stripe.com/v3/"></SCRIPT>
done loading stripe
<SCRIPT type=text/javascript>
try {
    document.writeln('creating Stripe object');
    // error occurs here, Stripe is undefined
    var stripe = Stripe('<PUBLIC KEY GOES HERE>');
    document.writeln('redirecting to checkout');
    stripe.redirectToCheckout({
        sessionId: '<SESSION ID GOES HERE>'
    }).then(function (result) {
    });
    document.writeln('done calling javascript');
}
catch(error) {
    document.writeln('error occurred: ' + error.message);
}
</SCRIPT>
<H1>....DONE</H1></BODY></HTML>  """


class Main(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, size=(1000, 800))
        self._times_loaded = 0
        self.webview = WebView.New(self)  # type: WebView
        self.webview.Bind(EVT_WEBVIEW_ERROR, self.on_error)
        self.webview.Bind(EVT_WEBVIEW_LOADED, self.on_loaded)
        self.webview.Bind(EVT_WEBVIEW_NAVIGATING, self.on_navigate)
        self.webview.Bind(EVT_WEBVIEW_NEWWINDOW, self.on_new_window)
        # wx.CallAfter(self.load_gateway)
        wx.CallAfter(self.load_html)

        self.Show()

    # def load_gateway(self, evt=None):
    #     self.webview.LoadURL(url)

    def load_html(self):
        self.webview.SetPage(html, "www.stripe.com")

    def reset_page(self):
        self.webview.SetPage(self.webview.GetPageSource(), url)

    # def redirect_to_checkout(self):
    #     # stripe.
    #     session= stripe.checkout.session.Session.create(test_stripe_public_key)

    def on_error(self, evt):
        print(f"error occurred: {evt}")

    def on_navigate(self, evt):
        print("on navigate")

    def on_loaded(self, evt):
        print("loaded")
        self._times_loaded += 1

    def on_new_window(self, evt):
        print("new window event")


try:
    app = wx.App()
    frame = Main()
    app.MainLoop()
except:
    input(traceback.format_exc())
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Payments</title>
</head>
<body>

    <script type="text/javascript">
    function redirectToCheckout(evt){
        try {
            document.writeln('loading stripe.js')
            var stripe = Stripe('REDACTED');
            document.writeln('redirecting to checkout');
            stripe.redirectToCheckout({
                sessionId: 'REDACTED'
            }).then(function (result) {
            });
            document.writeln('done calling javascript');
        }
        catch(error) {
            document.writeln('error occurred: ' + error.message);
        }
    }
    //source: https://stackoverflow.com/questions/950087/how-do-i-include-a-javascript-file-in-another-javascript-file
    function loadScript(url, callback)
        {
            // Adding the script tag to the head as suggested before
            //document.writeln('loading stripe script');
            console.log('loading stripe script');
            var head = document.head;
            var script = document.createElement('script');
            script.type = 'text/javascript';
            script.src = url;

            // Then bind the event to the callback function.
            // There are several events for cross browser compatibility.
            script.onreadystatechange = callback;
            script.onload = callback;

            // Fire the loading
            head.appendChild(script);
        }

    function loadStripe(evt){
        loadScript('https://js.stripe.com/v3/', redirectToCheckout);
        }

    var onloadScript = loadStripe; 

    if(window.attachEvent) {
        window.attachEvent('onload', onloadScript);
    } else {
        if(window.onload) {
            var curronload = window.onload;
            var newonload = function(evt) {
                curronload(evt);
                onloadScript(evt);
            };
            window.onload = newonload;
        } else {
            window.onload = onloadScript;
        }
    }

    </script>

Page loaded
</body>
</html>