2017-08-13 47 views
0

當我在模擬器上的Code Name One上開發應用程序時,我遇到了奇怪的問題。Code-Name-One瀏覽器組件的奇怪行爲在模擬器中

我有一個Tabs與一個Tab,此標籤有一個browserComponent HTML內容。它具有調用JavaScript函數onclick事件的span元素,該JavaScript函數調用創建新的Tab並將其添加到Tabs的Java方法。

這一刻的一切進展順利,但BrowserComponent開始加載CodeNameONe主頁本身沒有任何指示,所以我想知道如果這是一個錯誤或什麼。我使用NetBeans 8.2,最後一個版本爲CodeNameOne

注意我在另一個例子中稱爲從JS功能的Java方法與Tabs和瀏覽器沒有加載任何外部網頁,所以我認爲是關係到Tabs比任何其他更多的東西。

注意我相信沒有問題相關的代碼,但我後,建議這樣做後發佈它。

這是JavaScript函數:

function openMessageFaceJS() 
    { 
     window.openMessageFace();     
    } 

,這是Java方法

this.context.getWindow().//context is a JSObject 
      set("openMessageFace", (JSFunction) (who, are_you) -> 
      { 
       manager.openMessageFace(); 
       //look blow to see this method openMessageFace(); 
      }); 

而在另一個類的實際方法的代碼

public void openMessageFace() 
{ 
    //this operation is performed successfuly 
    Component component = create1(); 

    tabs.addTab("what (:", component); 
    sendMessageFacePosotiin = tabs.getTabCount() - 1; 
    tabs.setSelectedIndex(sendMessageFacePosotiin, true); 
} 
+0

而究竟如何做你期望如果我們看不到實際的代碼,任何人都可以提供幫助? –

+0

@JimGarrison感謝有趣的我沒有上傳的代碼,由於兩個原因** 1)**代碼太長分佈在許多類** 2)**當我從'JS'函數調用'Java'方法它工作正常,但不在'Tabs'中,所以我認爲它與代碼沒有關係 – Anas

+0

您能停止過度使用代碼格式嗎?它用於實際代碼,而不是編程語言的名稱。 – bcsb1001

回答

1

要調用回調在頁面完成加載之前,「橋」還沒有完全建立。要做的最安全的事情是將所有JS橋樑的東西放在onLoad web事件中,以確保安裝已完成。


BrowserComponent bc = new BrowserComponent(); 
bc.addWebEventListener("onLoad", e->{ 
    JavascriptContext ctx = new JavascriptContext(bc); 
    ... etc.... 
}); 

這麼說,我已經做了一個小的修復應該警惕這個問題here

這將是在未來的庫更新可用(星期五我相信)

+0

感謝@steve有趣,但回調「Java」方法已成功調用,因此頁面已完全加載成功,並且在使用代碼時仍然發佈了問題,**問題**實際上是「在回調Java方法調用成功之後,瀏覽器自動加載一個頁面,這個頁面是代碼名稱一個主頁 – Anas

+0

我還建議爲腳本創建一個等待隊列,它是t在頁面完全加載之前被執行,當它成功加載時,我們會按順序執行 - (: – Anas

+0

Steve,這可能是這個提交的副作用嗎? https://github.com/codenameone/CodenameOne/commit/ce5bbd28e5e1bc297f292ccf30e550de08810250 –