GWT新手,但我很喜歡它。我確實有一個很容易重現的問題。這對我來說是一個很大的問題,因爲我想爲PubNub創建一個GWT模塊 - 這是我們內部使用的實用程序。GWT腳本注入失敗與PubNub
我創建了一個演示項目來測試封裝,我發現ScriptInjector/Pubnub有一個有趣的問題。
起初我遵循PubNub指示。注意:我已將我的密鑰包含在我的測試帳戶中。隨意使用它們。
關注中(指定用我的鑰匙),我就把這兩個項目在HTML文件中的GWT項目的說明:
<div pub-key="pub-b8b75fbd-c4cf-4583-bab9-424af7a7f755" sub-key="sub-5e843c94-1193-11e2-bba9-b116c93082cf" ssl="off" origin="pubsub.pubnub.com" id="pubnub"></div>
<script src="http://cdn.pubnub.com/pubnub-3.1.min.js"></script>
當我這樣做,我可以用JSNI訪問pubnub。這一切都很好。
不起作用的是,如果我在這裏刪除標記並使用下面的代碼注入腳本。我知道該腳本會注入,因爲我可以看到成功消息,並且我可以在Chrome中的開發人員工具中看到該腳本。
ScriptInjector.fromUrl("http://cdn.pubnub.com/pubnub-3.1.js").setCallback(
new Callback<Void, Exception>() {
public void onFailure(Exception reason) {
Window.alert("Script load failed.");
}
public void onSuccess(Void result) {
Window.alert("Script load success.");
}
}).inject();
我覺得這必須以某種方式有關與延遲腳本訪問DOM,或因爲腳本是不是DOM的一部分。它試圖訪問設置格,它不能...(只是我的猜測)
有什麼想法?我需要將項目移出html文件,因爲我需要將此項目模塊化以用於其他大型項目。任何幫助,將不勝感激。 (PS,我也嘗試過創建html小部件,並將它們添加到EntryPoint中,這也會根據我在Chrome瀏覽器中的瀏覽器添加標籤到該頁面,但它無法工作,就像ScriptInjector失敗一樣。)
編輯:這是簡單的一個項目,我可以做演示問題:
HTML文件:
的結束標記上面:
<div pub-key="pub-b8b75fbd-c4cf-4583-bab9-424af7a7f755" sub-key="sub-5e843c94-1193-11e2-bba9-b116c93082cf" ssl="off" origin="pubsub.pubnub.com" id="pubnub"></div>
<script src="http://cdn.pubnub.com/pubnub-3.1.min.js"></script>
<script src="pubnubWrapper.js"></script>
個pubnubWrapper.js(基本上是什麼在pubnub網站):
function subToPubNub(){
PUBNUB.subscribe({
channel : "hello_world", // CONNECT TO THIS CHANNEL.
restore : false, // STAY CONNECTED, EVEN WHEN BROWSER IS CLOSED
// OR WHEN PAGE CHANGES.
callback : function(message) { // RECEIVED A MESSAGE.
alert(message);
},
disconnect : function() { // LOST CONNECTION.
alert(
"Connection Lost." +
"Will auto-reconnect when Online."
)
},
reconnect : function() { // CONNECTION RESTORED.
alert("And we're Back!")
},
connect : function() { // CONNECTION ESTABLISHED.
PUBNUB.publish({ // SEND A MESSAGE.
channel : "hello_world",
message : "Hi from PubNub."
})
}
})
}
ScriptTest.java:
public class ScriptTest implements EntryPoint {
public void onModuleLoad() {
//add a button to sub to pubnub
Button subButton = new Button("Sub");
//add the event handler for button
subButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
//sub to pubnub
callSub();
}
});
RootPanel.get().add(subButton);
}
public native void callSub() /*-{
//call my wrapper to pubnub
$wnd.subToPubNub();
}-*/;
}
這所有的作品是。
如果從html文件中刪除pubnub腳本並將其添加到腳本注入器中,它將失敗。如果將腳本添加到gwt.xml文件中,則失敗。
任何想法?
想法很好,但你不能注入fromUrl到似乎TOP_WINDOW。我會試着將我的代碼放到一個超小的東西上,然後發佈到這裏。 – CharlieY
你是什麼意思?根據[Javadoc](http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/core/client/ScriptInjector.FromUrl.html#setWindow(com.google.gwt) .core.client.JavaScriptObject))你可以注入到TOP_WINDOW中。 –
對不起,我打錯了。您的代碼是正確的,並將其放入文檔的
。注射仍然不起作用。我會提出簡單的項目來顯示問題。 – CharlieY