2011-01-12 51 views
0

我正在使用瀏覽器字段,它正在模擬器4.7 storm.But中顯示,但當我在設備上執行時,它仍然是空白頁面不顯示。任何人都可以幫助。黑莓風暴設備中的瀏覽器提交問題

+0

我刪除了附加的長RIM演示代碼。如果您還沒有更改演示代碼,請提供鏈接。 –

+0

我在9800 w/6.0 –

回答

0

下面是代碼,我試圖追加 「;接口= true」 將仍它不是9550設備上執行的URL,而在9550模擬器其執行

/* * BrowserFieldDemo.java * *版權所有©1998-2009 Research In Motion Ltd. * *注意:爲簡單起見,此示例應用程序可能不會利用 *資源束和資源字符串。但是,強烈建議 *應用程序開發人員利用BlackBerry開發平臺中的本地化功能 *以確保跨多種語言和地理位置的無縫應用程序體驗。欲瞭解更多信息 *關於本地化您的應用程序,請參閱與本版本相關的BlackBerry Java Development *環境開發指南。 */

import java.io.IOException;

import javax.microedition.io.HttpConnection;

import net.rim.device.api.browser.field。 ; import net.rim.device.api.io.http.HttpHeaders; import net.rim.device.api.system.Application; import net.rim.device.api.ui。; import net.rim.device.api.ui.component.Status; import net.rim.device.api.ui.container.MainScreen; import net.rim.device.api.system。*;

最終類BrowserFieldDemo延伸的UIApplication實現RenderingApplication {

private static final String REFERER = "referer"; 

private RenderingSession _renderingSession; 
private HttpConnection _currentConnection; 
private MainScreen _mainScreen; 


/*************************************************************************** 
* Main. 
**************************************************************************/ 
public static void main(String[] args) 
{ 
    BrowserFieldDemo app = new BrowserFieldDemo(); 
    app.enterEventDispatcher(); 
} 

private BrowserFieldDemo() 
{   

    _mainScreen = new MainScreen();   
    pushScreen(_mainScreen); 
    _renderingSession = RenderingSession.getNewInstance(); 

    // Enable javascript. 
    //_renderingSession.getRenderingOptions().setProperty(RenderingOptions.CORE_OPTIONS_GUID, RenderingOptions.JAVASCRIPT_ENABLED, true);       

    PrimaryResourceFetchThread thread = new PrimaryResourceFetchThread("http://wwww.vensi.com"+";interface=true", null, null, null, this); 
    thread.start();      

} 

void processConnection(HttpConnection connection, Event e) 
{ 
    // Cancel previous request. 
    if (_currentConnection != null) 
    { 
     try 
     { 
      _currentConnection.close(); 
     } 
     catch (IOException e1) 
     { 
     } 
    } 

    _currentConnection = connection; 

    BrowserContent browserContent = null; 

    try 
    { 
     browserContent = _renderingSession.getBrowserContent(connection, this, e); 

     if (browserContent != null) 
     { 
      Field field = browserContent.getDisplayableContent(); 

      if (field != null) 
      { 
       synchronized (Application.getEventLock()) 
       { 
        _mainScreen.deleteAll(); 
        _mainScreen.add(field); 
       } 
      } 

      browserContent.finishLoading(); 
     } 

    } 
    catch (RenderingException re) 
    { 
    } 
    finally 
    { 
     SecondaryResourceFetchThread.doneAddingImages(); 
    } 

}  

/** 
* @see net.rim.device.api.browser.RenderingApplication#eventOccurred(net.rim.device.api.browser.Event) 
*/ 
public Object eventOccurred(Event event) 
{ 
    int eventId = event.getUID(); 

    switch (eventId) 
    { 
     case Event.EVENT_URL_REQUESTED : 
     { 
      UrlRequestedEvent urlRequestedEvent = (UrlRequestedEvent) event;  

      PrimaryResourceFetchThread thread = new PrimaryResourceFetchThread(urlRequestedEvent.getURL(), 
                        urlRequestedEvent.getHeaders(), 
                        urlRequestedEvent.getPostData(), 
                        event, this); 
      thread.start(); 

      break; 

     } 
     case Event.EVENT_BROWSER_CONTENT_CHANGED: 
     {     
      // Browser field title might have changed update title. 
      BrowserContentChangedEvent browserContentChangedEvent = (BrowserContentChangedEvent) event; 

      if (browserContentChangedEvent.getSource() instanceof BrowserContent) 
      { 
       BrowserContent browserField = (BrowserContent) browserContentChangedEvent.getSource(); 
       String newTitle = browserField.getTitle(); 
       if (newTitle != null) 
       { 
        synchronized (getAppEventLock()) 
        { 
         _mainScreen.setTitle(newTitle); 
        }            
       }          
      }     

      break;     

     } 
     case Event.EVENT_REDIRECT : 
     { 
      RedirectEvent e = (RedirectEvent) event; 
      String referrer = e.getSourceURL(); 

      switch (e.getType()) 
      { 
       case RedirectEvent.TYPE_SINGLE_FRAME_REDIRECT : 
        // Show redirect message. 
        Application.getApplication().invokeAndWait(new Runnable() 
        { 
         public void run() 
         { 
          Status.show("You are being redirected to a different page..."); 
         } 
        }); 

       break; 

       case RedirectEvent.TYPE_JAVASCRIPT : 
        break; 

       case RedirectEvent.TYPE_META : 
        // MSIE and Mozilla don't send a Referer for META Refresh. 
        referrer = null;  
        break; 

       case RedirectEvent.TYPE_300_REDIRECT : 
        // MSIE, Mozilla, and Opera all send the original 
        // request's Referer as the Referer for the new 
        // request. 
        Object eventSource = e.getSource(); 
        if (eventSource instanceof HttpConnection) 
        { 
         referrer = ((HttpConnection)eventSource).getRequestProperty(REFERER); 
        } 

        break; 
       } 

       HttpHeaders requestHeaders = new HttpHeaders(); 
       requestHeaders.setProperty(REFERER, referrer); 
       PrimaryResourceFetchThread thread = new PrimaryResourceFetchThread(e.getLocation(), requestHeaders,null, event, this); 
       thread.start(); 
       break; 

     } 
     case Event.EVENT_CLOSE : 
      // TODO: close the appication 
      break; 

     case Event.EVENT_SET_HEADER :  // No cache support. 
     case Event.EVENT_SET_HTTP_COOKIE : // No cookie support. 
     case Event.EVENT_HISTORY :   // No history support. 
     case Event.EVENT_EXECUTING_SCRIPT : // No progress bar is supported. 
     case Event.EVENT_FULL_WINDOW :  // No full window support. 
     case Event.EVENT_STOP :    // No stop loading support. 
     default : 
    } 

    return null; 
} 

/** 
* @see net.rim.device.api.browser.RenderingApplication#getAvailableHeight(net.rim.device.api.browser.BrowserContent) 
*/ 
public int getAvailableHeight(BrowserContent browserField) 
{ 
    // Field has full screen. 
    return Display.getHeight(); 
} 

/** 
* @see net.rim.device.api.browser.RenderingApplication#getAvailableWidth(net.rim.device.api.browser.BrowserContent) 
*/ 
public int getAvailableWidth(BrowserContent browserField) 
{ 
    // Field has full screen. 
    return Display.getWidth(); 
} 

/** 
* @see net.rim.device.api.browser.RenderingApplication#getHistoryPosition(net.rim.device.api.browser.BrowserContent) 
*/ 
public int getHistoryPosition(BrowserContent browserField) 
{ 
    // No history support. 
    return 0; 
} 


/** 
* @see net.rim.device.api.browser.RenderingApplication#getHTTPCookie(java.lang.String) 
*/ 
public String getHTTPCookie(String url) 
{ 
    // No cookie support. 
    return null; 
} 

/** 
* @see net.rim.device.api.browser.RenderingApplication#getResource(net.rim.device.api.browser.RequestedResource, 
*  net.rim.device.api.browser.BrowserContent) 
*/ 
public HttpConnection getResource(RequestedResource resource, BrowserContent referrer) 
{ 
    if (resource == null) 
    { 
     return null; 
    } 

    // Check if this is cache-only request. 
    if (resource.isCacheOnly()) 
    { 
     // No cache support. 
     return null; 
    } 

    String url = resource.getUrl(); 

    if (url == null) 
    { 
     return null; 
    } 

    // If referrer is null we must return the connection. 
    if (referrer == null) 
    { 
     HttpConnection connection = Utilities.makeConnection(resource.getUrl(), resource.getRequestHeaders(), null); 

     return connection; 

    } 
    else 
    { 
     // If referrer is provided we can set up the connection on a separate thread. 
     SecondaryResourceFetchThread.enqueue(resource, referrer); 
    } 

    return null; 
} 

/** 
* @see net.rim.device.api.browser.RenderingApplication#invokeRunnable(java.lang.Runnable) 
*/ 
public void invokeRunnable(Runnable runnable) 
{  
    (new Thread(runnable)).start(); 
}  

}

類PrimaryResourceFetchThread擴展Thread {

private BrowserFieldDemo _application; 
private Event _event; 
private byte[] _postData; 
private HttpHeaders _requestHeaders; 
private String _url; 

PrimaryResourceFetchThread(String url, HttpHeaders requestHeaders, byte[] postData, 
           Event event, BrowserFieldDemo application) 
{ 
    _url = url; 
    _requestHeaders = requestHeaders; 
    _postData = postData; 
    _application = application; 
    _event = event; 
} 

public void run() 
{ 
    HttpConnection connection = Utilities.makeConnection(_url, _requestHeaders, _postData); 
    _application.processConnection(connection, _event);   
} 

}

-1

樣本中存在一個錯誤,而BB人在這方面多年來一直沒有做任何事情。你永遠不會知道你的頁面沒有被渲染,你將被自己重定向到調用頁面。當他們無法呈現頁面時,他們會在HTTP響應中插入一個重定向代碼,而不是提供渲染異常(在輸入流中檢查它並將其轉換爲字符串,您應該知道),並且從不顯示預期頁面。他們已經使用BrowserField在5.0及更高版本中解決了這個問題,但我們需要低端手機的解決方案。

+2

Dude(Abhinav)上遇到了同樣的問題,您不能在此處複製粘貼您的舊答案:http://stackoverflow.com/questions/4093634/https-page-not像這樣的瀏覽器內容。 – Irwin