gpt4 book ai didi

android - 基本内部链接在 Honeycomb 应用程序中不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:09:38 25 4
gpt4 key购买 nike

在我发布的应用程序的 Android 版本 3 中,内部链接似乎不起作用。此时,我的应用以 Froyo 为目标平台。

该应用程序在大量手机上运行良好,但我的新 Galaxy Tab 无法处理内部链接!!它可以在 html 页面中处理它们,即:

<a href="#faq">Go to faq</a>  <!-- goes to FAQ link -->

转到同一页面下方的标签:

<a name="faq" id="faq"></a>  

但是从另一个 html 文件,即索引页面,链接在 Honeycomb 中不再有效:

<a href="mainpage.html#faq">FAQ</a>  <!-- goes to error page -->

另外,如果我转到一个内部链接,然后从那里跟随一个链接到另一个页面,然后点击后退按钮,(它被覆盖到以前的 webview 页面)你会得到同样的错误,即:

The webpage at file:///android_asset/folder/mainpage.html#faq might be temporarily    down or it may have moved permanently to a new web address

卧槽! webview就在页面上,你1秒后回击,它也找不到。它也不能从另一个 html 页面链接,但它在 1.x、2.x 中都工作正常,只是不是 3.1(没有尝试过 3.0)

注意:我见过这个几乎相同的问题: android_asset not working on Honeycomb?但是我的 Assets 路径中没有空格。

我试过使用和不使用网络客户端,并尝试了 DOM 和缓存设置,但无济于事。这是我目前在 oncreate 中的一个例子:

        browser = new WebView(this);
// browser = (WebView) findViewById(R.id.webkit); // tried with XML and without
browser.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
browser.getSettings().setJavaScriptEnabled(true);
browser.getSettings().setPluginsEnabled(true);
// browser.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
// browser.getSettings().setUseWideViewPort(true);
browser.setBackgroundColor(Color.parseColor("#333333"));
browser.setInitialScale(1);
browser.getSettings().setBuiltInZoomControls(true);


final Activity MyActivity = this;
browser.setWebChromeClient(new WebChromeClient() {

public void onProgressChanged(WebView view, int progress) {
// Make the bar disappear after URL is loaded, and changes
// string to Loading...

setProgressBarIndeterminateVisibility(true);

MyActivity.setTitle(" Loading . . . " + progress + "%");
MyActivity.setProgress(progress * 100); // Make the bar

if (progress == 100) {
setTitle(" APP TITLE YADA YADA");
setProgressBarIndeterminateVisibility(false);
}
}
});
browser.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
// Handle the error
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url); // note I tried with and without overriding this
return true;
}

});
setContentView(browser);

browser.loadUrl("file:///android_asset/folder/page.html");

最佳答案

这是我使用的解决方案。在所有 Android 平台上工作相同(在所有 1.6 到 4.0.1 上测试)

像往常一样加载文件,不带 anchor 。例如:

webview.loadUrl("file:///android_asset/file.html");

加载没有 anchor 的 URL(例如 file:///android_asset/file.html),并添加:

webview.setWebViewClient(new WebViewClient()
{
public void onPageFinished(WebView view, String url)
{
if (this.anchor != null)
{
view.loadUrl("javascript:window.location.hash='" + this.anchor + "'");
this.anchor = null;
}
}
});

其中 anchor 是您要跳转到的 anchor 。

您必须确保启用了 javascript:

WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);

这是为了将文件加载到 webview 中。现在,如果您想捕获现在已损坏的内部链接,如其他答案中所建议的那样,请覆盖 onReceivedError 方法并插入执行类似以下操作:

    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
int found = failingUrl.indexOf('#');

if (found > 0)
{
anchor = failingUrl.substring(found + 1, failingUrl.length());
view.loadUrl(failingUrl.substring(0, found));
}
}

关于android - 基本内部链接在 Honeycomb 应用程序中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6542702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com