4

我正在尝试在BrowserField用户实际单击链接时处理事件。我研究过BrowserFieldListener,尝试过它的documentCreated()方法,但是当页面开始加载时,它会给我一个响应。我想要在用户单击 browserField 中的链接时触发。

我在这里想念什么?

4

3 回答 3

6

覆盖ProtocolController 的handleNavigationRequest(),例如

ProtocolController controller = new ProtocolController(browserField) {
    public void handleNavigationRequest(BrowserFieldRequest request) throws Exception {
         /* 
         Here you get the redirection link using 
           request.getURL() 
         and do what you want to do 
          */
      // to display url in browserfield use
      InputConnection inputConnection = handleResourceRequest(request);
      browserField.displayContent(inputConnection, request.getURL()); 

    }
};

browserField.getConfig().setProperty(BrowserFieldConfig.CONTROLLER, controller);
于 2012-08-13T01:50:03.807 回答
3

使用我使用的以下类

public class CacheProtocolController extends ProtocolController{
    public CacheProtocolController() {
        super(browserField);     
    }

    /**
    * Handle navigation requests (e.g., link clicks)
    */
    public void handleNavigationRequest(final BrowserFieldRequest request) throws Exception {
        UiApplication.getUiApplication().invokeAndWait(new Runnable() {
            public void run() {
                // TODO Auto-generated method stub
                Logger.debug("*******URL*******",request.getURL() );
        });
    }

    /**
    * Handle resource request (e.g., images, external css/javascript resources)
    */
    public InputConnection handleResourceRequest(BrowserFieldRequest request) throws Exception {
        return super.handleResourceRequest(request);
    }
}
于 2012-08-28T11:43:00.560 回答
0

我已经使用以下类解决了这个问题:

public class CacheProtocolController extends ProtocolController{
    private SparseList sparseList = null;
    private int imageIndex ;
    private int click = 0;
    private BrowserField browserField = null;

    public CacheProtocolController(BrowserField browserField,SparseList sparseList,int imageIndex ) {
        super(browserField);
        this.sparseList = sparseList;
        this.imageIndex = imageIndex;
    }

    /**
    * Handle navigation requests (e.g., link clicks)
    */
    public void handleNavigationRequest(final BrowserFieldRequest request) throws Exception {
        UiApplication.getUiApplication().invokeAndWait(new Runnable() {
            public void run() {
                Logger.debug("*******URL*******",request.getURL() );
                String requestUrl = null;
                requestUrl = FileManipulations.replaceAll(request.getURL(), "file:///SDCard/BlackBerry/pictures/", "../");
                Logger.debug("*******requestUrl*******",requestUrl );
                Enumeration enumeration = sparseList.elements();
                while (enumeration.hasMoreElements()) {
                    final News news = (News) enumeration.nextElement();
                    if(news.getDetailsURL().equalsIgnoreCase(requestUrl)){
                        if(click == 1){
                            click = 0;
                            UiApplication.getUiApplication().pushScreen(new DetailedNewsScreen(news.getImageURL() , imageIndex));
                        } else
                            click++;
                    }
                }
            }
        });
    }

    /**
    * Handle resource request (e.g., images, external css/javascript resources)
    */
    public InputConnection handleResourceRequest(BrowserFieldRequest request) throws Exception {
        return super.handleResourceRequest(request);
    }

}

并在MainScren使用以下

browserField = new BrowserField();
browserField.getConfig().setProperty(BrowserFieldConfig.CONTROLLER, new CacheProtocolController(browserField,List,index));
于 2012-08-28T06:40:37.273 回答