gpt4 book ai didi

安卓 : Html Anchor Link works only once in webview

转载 作者:太空狗 更新时间:2023-10-29 13:40:29 26 4
gpt4 key购买 nike

在使用 anchor 链接加载 html 内容时,我在 webview 中遇到了一些奇怪的问题。
以下代码非常适合 anchor 标记,但仅一次
当我第二次按 anchor 标记时,它不起作用。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mywebview);

String html = "<html><body><p><a href='#C4'>See also Chapter 4</a></p><p><h2>Chapter 1</h2><p>This chapter explains ba bla bla</p><h2>Chapter 2</h2><p>This chapter explains ba bla bla</p><h2>Chapter 3</h2><p>This chapter explains ba bla bla</p><h2><a name='C4'>Chapter 4</a></h2><p>This chapter explains ba bla bla</p><h2>Chapter 5</h2><p>This chapter explains ba bla bla</p><h2>Chapter 6</h2><p>This chapter explains ba bla bla</p><h2>Chapter 7</h2><p>This chapter explains ba bla bla</p><h2>Chapter 8</h2><p>This chapter explains ba bla bla</p><h2>Chapter 9</h2><p>This chapter explains ba bla bla</p></body></html>";
String mime = "text/html";
String encoding = "utf-8";

WebView myWebView = (WebView)this.findViewById(R.id.webView1);
myWebView.loadDataWithBaseURL(null, html, mime, encoding, null);

}

我试过了this链接但对我不起作用。

更新:

我的代码在各种设备上的测试结果。

工作
1. 三星 S Plus --> 2.3.4
2. 三星 Galaxy Y --> 2.3.6
3. 三星 Galaxy Tab --> 2.3.3
4. 摩托罗拉 Xoom --> 3.2

不工作
1. LG 擎天柱 --> 2.2
2. DELL XCD35(中兴 Blade ) --> 2.2
3.宏达野火 --> 2.2.1

这是操作系统问题还是其他原因?对此有什么解决方案吗??


最佳答案

问题是点击 anchor 链接后重新加载页面。

我使用了下面的代码,

Assets 文件夹中的 chapters.xml

<html>
<body>
<p><a href="#C4">See also Chapter 4</a></p>
<p><h2><a name='C1'>Chapter 1<a></h2><p>This chapter explains ba bla bla</p>
<h2>Chapter 2</h2><p>This chapter explains ba bla bla</p>
<h2>Chapter 3</h2><p>This chapter explains ba bla bla</p>
<h2><a name='C4'>Chapter 4</a></h2><p>This chapter explains ba bla bla</p>
<h2>Chapter 5</h2><p>This chapter explains ba bla bla</p>
<h2>Chapter 6</h2><p>This chapter explains ba bla bla</p>
<h2>Chapter 7</h2><p>This chapter explains ba bla bla</p>
<a href="#C1">See also Chapter 1</a>
</body>
</html>

JAVA 代码:第一种方式

public class MainActivity extends Activity {
WebView myWebView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myWebView = new WebView(this);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadUrl("file:///android_asset/chapters.html");

setContentView(myWebView);

final GestureDetector gestureDetector = new GestureDetector(
new MyGestureDetector());
View.OnTouchListener gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
};
myWebView.setOnTouchListener(gestureListener);
}

class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
myWebView.reload();
Log.i("", "Reload");
return super.onSingleTapConfirmed(e);

}
}
}

编辑 JAVA 代码:第二种方式 - 我已经试过这个东西 insted onTouchListener 并且对我来说工作正常。

public class MainActivity extends Activity {
WebView myWebView;
public static boolean flag = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myWebView = new WebView(this);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadUrl("file:///android_asset/chapters.html");
setContentView(myWebView);
myWebView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
if (url.contains("#") && flag == false) {
myWebView.loadUrl(url);
flag = true;
} else {
flag = false;
}
}

});
}
}

从一个文件打开另一个 HTML 文件的 anchor 标记

        myWebView = new WebView(this);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadUrl("file:///android_asset/1.htm");
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
try{
chapter = url.substring(url.indexOf("#"),url.length());
url = url.substring(0,url.indexOf("#"));
}catch (Exception e) {
chapter = "";
}
myWebView.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
if (!chapter.equalsIgnoreCase("") && flag == false) {
myWebView.loadUrl(url+chapter);
flag = true;
} else {
flag = false;
}
}
});
setContentView(myWebView);

关于安卓 : Html Anchor Link works only once in webview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11188348/

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