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