如何在工作灯中建立webview和html页面之间的通信?

时间:2013-01-30 09:16:33

标签: android cordova ibm-mobilefirst

我正在使用Android的Worklight框架将浏览器制作为混合应用程序。我实现了我的地址栏作为输入元素,它接收用户输入并将参数传递给webview以加载页面。 但是,我无法弄清楚如何反过来:每当用户点击webview中的链接时,我希望地址栏更改为新位置。

2 个答案:

答案 0 :(得分:1)

您是否正在实施已打开的本机页面?如果是这样,请看ChildBrowser,基本上做同样的事情。它有一个TextView用作地址栏。您可以决定使用它,或者从中获取您想要的零碎碎片。无论如何,我会想象你想要做什么像this。通过覆盖WebViewClient中的onLoadResource,您应该能够获取URL并更改TextBox。

回应以下评论:在wlEnvInit()函数中环境中的主要js文件:

function wlEnvInit(){
    wlCommonInit();
    // Environment initialization code goes here       

    document.onclick=manageLinks;
}

然后在这个函数中获取url并设置输入元素的文本:

function manageLinks(event) {
    var link = event.target;

    //go up the family tree until we find the A tag 
    while (link && link.tagName != 'A') {
        link = link.parentNode;
    }

    if (link) {
        var url = link.href;
        console.log("url = " + url);

        //You can decide if you want to separate external or 
        //internal links, depending on your application
        var linkIsExternal = ((url.indexOf('http://') == 0) || (url.indexOf('https://') == 0));

        if (linkIsExternal) {
            myInput.setText(url);
            return false;
        }
    }

    return true;
}

在您的WebView内部,在插件内部拦截URL,如下所示:

  webview.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
                //use this area to set your input. Depending on how you
                //implemented your plugin, you may need to return this value
                //back to your main activity
                Toast.makeText(cordova.getActivity(), "Loading: " + url, Toast.LENGTH_LONG).show();
        }
   });

答案 1 :(得分:0)

您是否尝试从href获取url并分配给输入变量并执行get / post?我知道在SDK中我可能认为它在框架中不会更难。您可以使用解析器或类似的东西将hiperlinks存储在数组中。

示例伪代码:

When_hiperlink_clicked:  //could be like a listener (search about it)
url = hiperlink.getURL("myHiperlink");
myinput.setText(url);
execute_input_bar_action();

很难找到没有代码或更多的东西,抱歉。