0

我正在使用适用于 Android 的 worklight 框架将浏览器制作为混合应用程序。我将地址栏实现为一个输入元素,它接收用户输入并将参数传递给 webview 以加载页面。但是,我不知道如何做相反的事情:每当用户单击 webview 中的链接时,我希望地址栏更改为新位置。

4

2 回答 2

1

您是否正在实现打开的本机页面?如果是这样,看看ChildBrowser,它基本上做同样的事情。它有一个 TextView 用作地址栏。您可能会决定使用它,或者从中获取您想要的零碎东西。无论如何,我会想象你想做这样的事情。通过覆盖 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();
        }
   });
于 2013-01-30T12:57:09.177 回答
0

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

示例伪代码:

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

没有代码或其他东西很难弄清楚,对不起。

于 2013-01-30T10:00:53.427 回答