动作webview中w3c dom的监听器事件

时间:2017-03-25 16:54:54

标签: java dom webview

我正在尝试使用java中的w3c.dom.events处理按钮上的click事件,但是我得到错误"无法对非静态方法进行静态引用addEventListener"请帮帮我。这是我的代码。

 Node button = form.getElementsByTagName("button").item(0);
                            if(button!=null && button.hasAttributes()){
                                NamedNodeMap attr = button.getAttributes();
                                for(int j=0; j<attr.getLength(); j++){
                                    Attr atribute = (Attr)attr.item(j);
                                    if(atribute.getValue().equals("submit")){
                                        System.out.println("submit button detected.");
                                        org.w3c.dom.events.EventListener listener = new org.w3c.dom.events.EventListener(){
                                            @Override
                                            public void handleEvent(org.w3c.dom.events.Event evt) {
                                                System.out.println("this is a action listener.");
                                            }

                                        };
                                        ((EventTarget) button)org.w3c.dom.events.EventTarget.addEventListener("click", listener, false); //here i am getting the error

                                    }

                            }
                        }

2 个答案:

答案 0 :(得分:0)

您收到的错误&#34;无法对非静态方法进行静态引用addEventListener&#34;手段: 方法:addEventListener不是静态方法 - 这意味着你不能直接从它的类中调用它,你需要创建一个实现&#39; EventTarget&#39;叫它。

((EventTarget) button)org.w3c.dom.events.EventTarget.addEventListener("click", listener, false); 

因此,如果我们分解这行代码,我们就有:在对象上强制转换为&#39;按钮&#39;:(EventTarget)button,然后在方法调用{{1返回(void)。所以计算机看到的基本上是你在addEventListener接口内调用了方法addEventListener(这是不可能的错误,因为方法是非STATIC你不能直接从类/接口调用它)然后你输入它来输入EventTarget。 另请注意:接口中的静态方法不能存在。

要解决此问题,只需使用您创建的按钮对象添加EventTarget

Eventlistener

因此,在这种情况下,您将按钮类型转换为EventTarget。请注意((EventTarget)button).addEventListener("click", listener, false); ,它允许您现在将事件侦听器添加到对象(按钮)。

答案 1 :(得分:0)

进口存在问题。这是我解决和修改过的代码。

`public class DetectForm {
    private HTMLInputElement password = null;
    private HTMLInputElement username = null;
    private boolean isForm = false;
    public void detect(Document doc){


        if (doc!=null && doc.getElementsByTagName("form").getLength() > 0) {
            HTMLFormElement form = (HTMLFormElement) doc.getElementsByTagName("form").item(0);
            NodeList nodes = form.getElementsByTagName("input");

            for (int i = 0; i < nodes.getLength(); i++) {
                if(nodes.item(i).hasAttributes()){
                    NamedNodeMap attr = nodes.item(i).getAttributes();
                    for (int j=0 ; j<attr.getLength();j++){
                        Attr atribute = (Attr)attr.item(j);
                        if(atribute.getValue().equals("password")){
                            System.out.println("Password detected");
                            password = (HTMLInputElement) nodes.item(i);
                            username = (HTMLInputElement) nodes.item(i-1);
                            //                          password.setValue("helloword");
                            //                          username.setValue("helloword");
                            isForm = true;
                        }
                    }
                }

            }

            EventListener listener = new EventListener() {
                @Override
                public void handleEvent(Event evt) {
                    System.out.println("action listener from DOM.");
                    if(username!=null && password!=null){
                        String user = username.getValue();
                        String pass = password.getValue();
                    }


                }
            };
            if(isForm){
                Node button = form.getElementsByTagName("button").item(0);
                if(button!=null && button.hasAttributes()){
                    NamedNodeMap attr = button.getAttributes();
                    for(int j=0; j<attr.getLength(); j++){
                        Attr atribute = (Attr)attr.item(j);
                        if(atribute.getValue().equals("submit")){
                            System.out.println("submit button detected.");
                            ((EventTarget) button).addEventListener("click", listener, false);

                        }

                    }
                }
            }

        }




    }

}
`