我有支付功能的gwt应用程序。我想在代码中插入UIBinder(由authorize.net为验证过的商家提供。我将我的网站添加到authorize.net服务器上的Verified Merchant Seal Domains List):
<div class="AuthorizeNetSeal">
<script type="text/javascript" language="javascript">var ANS_customer_id="MY_ID";</script>
<script type="text/javascript" language="javascript" src="//verify.authorize.net/anetseal/seal.js"></script>
<a href="http://www.authorize.net/" id="AuthorizeNetText" target="_blank">MerchantServices</a>
</div>
我试过以下: UIBinder:
<g:HTMLPanel>
<div class="AuthorizeNetSeal">
<a href="https://www.authorize.net/" id="AuthorizeNetText" target="_blank">Merchant Services</a>
</div>
</g:HTMLPanel>
并在initWidget(...)
之后的控件的构造函数中ScriptInjector.fromString("var ANS_customer_id = 'MY_ID';").inject();
ScriptInjector.fromUrl("//verify.authorize.net/anetseal/seal.js").inject();
尝试scheduleDeferred。试过ScriptInjector.fromUrl的setCallback()。调用成功方法。 但密封不会出现。 请帮忙
由于
答案 0 :(得分:0)
将script
元素添加到主页的head
部分。如果脚本很小和/或您没有使用代码拆分,那么使用ScriptInjector几乎没有优势。
使用浏览器控制台验证脚本是否从您提供的网址正确加载。
答案 1 :(得分:0)
您需要将它们注入正确的窗口:
ScriptInjector.fromString("var ANS_customer_id = 'MY_ID';").setWindow(ScriptInjector.TOP_WINDOW).inject();
但是seal.js
使用document.write
因此无论如何都不能以这种方式注入,它必须在浏览器加载时出现在HTML文档中。
您可以将此代码段放在HTML主机页面的隐藏<div>
中,以后您重新定位(Document.get().getElementById(…)
和其他appendChild
DOM方法)想要在你的应用程序中
...并且您应该要求Authorize.net提供其脚本的异步版本,这样如果他们的服务器速度很慢,他们就不会减慢您的应用程序的加载速度。
答案 2 :(得分:0)
感谢您的回答。我使用上面的html代码创建了单独的HTML页面,并将其插入iframe。