如何从webview中获取html内容?

2023-12-08

从 webview 获取 html 代码的最简单方法是什么? 我尝试了stackoverflow和google的几种方法,但找不到确切的方法。请说一下具体的方法。

public class htmldecoder extends Activity implements OnClickListener,TextWatcher
{
TextView txturl;
Button btgo;
WebView wvbrowser;
TextView txtcode;
ImageButton btcode;
LinearLayout llayout;
int flagbtcode;
public void onCreate(Bundle savedInstanceState)
{
            super.onCreate(savedInstanceState);
                setContentView(R.layout.htmldecoder);

    txturl=(TextView)findViewById(R.id.txturl);

    btgo=(Button)findViewById(R.id.btgo);
    btgo.setOnClickListener(this);

    wvbrowser=(WebView)findViewById(R.id.wvbrowser);
    wvbrowser.setWebViewClient(new HelloWebViewClient());
    wvbrowser.getSettings().setJavaScriptEnabled(true);
    wvbrowser.getSettings().setPluginsEnabled(true);
    wvbrowser.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    wvbrowser.addJavascriptInterface(new MyJavaScriptInterface(),"HTMLOUT");
    //wvbrowser.loadUrl("http://www.google.com");
    wvbrowser.loadUrl("javascript:window.HTMLOUT.showHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");


    txtcode=(TextView)findViewById(R.id.txtcode);
    txtcode.addTextChangedListener(this);

    btcode=(ImageButton)findViewById(R.id.btcode);
    btcode.setOnClickListener(this);

    }

public void onClick(View v)
{
    if(btgo==v)
    {
        String url=txturl.getText().toString();
        if(!txturl.getText().toString().contains("http://"))
        {
            url="http://"+url;
        }
        wvbrowser.loadUrl(url);
        //wvbrowser.loadData("<html><head></head><body><div style='width:100px;height:100px;border:1px red solid;'></div></body></html>","text/html","utf-8");
    }
    else if(btcode==v)
    {
        ViewGroup.LayoutParams params1=wvbrowser.getLayoutParams();
        ViewGroup.LayoutParams params2=txtcode.getLayoutParams();
        if(flagbtcode==1)
        {
            params1.height=200;
            params2.height=220;
            flagbtcode=0;
            //txtcode.setText(wvbrowser.getContentDescription());
        }
        else
        {
            params1.height=420;
            params2.height=0;
            flagbtcode=1;
        }
        wvbrowser.setLayoutParams(params1);
        txtcode.setLayoutParams(params2);

    }
}

public class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        view.loadUrl(url);
        return true;
    }
    /*@Override
    public void onPageFinished(WebView view, String url)
    {
        // This call inject JavaScript into the page which just finished loading. 
        wvbrowser.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
    }*/

}
class MyJavaScriptInterface
{
    @SuppressWarnings("unused")
    public void showHTML(String html)
    {

        txtcode.setText(html);
    }
}

public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub

}

public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
    // TODO Auto-generated method stub

}

public void onTextChanged(CharSequence s, int start, int before, int count) {
    wvbrowser.loadData("<html><div"+txtcode.getText().toString()+"></div></html>","text/html","utf-8");

}

}

其实这个问题有很多答案。以下是其中 2 个:

  • 第一个几乎和你的一样,我想我们是从同一个教程中得到的。

public class TestActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview);
        final WebView webview = (WebView) findViewById(R.id.browser);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");

        webview.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                webview.loadUrl("javascript:window.HtmlViewer.showHTML" +
                        "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
            }
        });

        webview.loadUrl("http://android-in-action.com/index.php?post/" +
                "Common-errors-and-bugs-and-how-to-solve-avoid-them");
    }

    class MyJavaScriptInterface {

        private Context ctx;

        MyJavaScriptInterface(Context ctx) {
            this.ctx = ctx;
        }

        public void showHTML(String html) {
            new AlertDialog.Builder(ctx).setTitle("HTML").setMessage(html)
                    .setPositiveButton(android.R.string.ok, null).setCancelable(false).create().show();
        }

    }
}

这样你就可以通过 javascript 抓取 html 了。这不是最漂亮的方法,但是当你有了 javascript 界面时,你可以添加其他方法来修改它。


  • 另一种方法是使用 HttpClient 像there.

我认为,您选择的选项还取决于您打算如何处理检索到的 html...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从webview中获取html内容? 的相关文章

随机推荐

  • 循环分割大数据帧并在 R 中写入多个 CSV 文件 [重复]

    这个问题在这里已经有答案了 我有一个包含 2500 万行的文件 需要根据因子级别将其拆分为更小的文件 我创建了一个数据框来包含不同的因子级别 并编写了一个循环来执行一些操作并写出一个csv 数据看起来像这样 Country Col2 Cod
  • 在 WinForms 线程上使用 CoInitializeEx

    我正在为 DSLR 相机开发一个 SDK 其中包含以下说明 开发Windows应用程序的注意事项 创建应用程序时 在 Windows 下运行的每个程序都需要 COM 初始化 线程以便从主线程以外的线程访问相机 线 创建用户线程并从中访问相机
  • 两个或多个带进度的前台通知在更新其进度时相互替换

    我有一项服务将在前台运行上传任务 然后在通知中显示进度 由于用户可能会使用不同的 id 请求多次上传 因此将运行两个或多个前台服务 一切正常 但我想要的是使用此代码显示所有任务的通知和进度 NotificationCompat Builde
  • 使用关联实体的正确方法是什么?

    这是描述 绘制 Poke Hospital 的实体关系图 其中提供 为神奇宝贝提供医疗服务 每个神奇宝贝都会与其中一位护士乔伊有个约会 在 除了记录每个神奇宝贝的名称 类型和训练师之外 系统需要跟踪多种类型的疾病 诊断为神奇宝贝 在预约期间
  • 是否可以避免实现文件中重复类名?

    有没有办法避免Graph 在实现文件中重复 但仍然将类拆分为标头 实现 如 头文件 ifndef Graph H define Graph H class Graph public Graph int n void printGraph v
  • 谷歌云端硬盘托管 URL 发生变化

    我开发了一个网络应用程序 使用谷歌驱动器作为托管平台 如下所述 https support google com drive answer 2881970 hl en 当用户访问时 应用程序一直运行正常 但昨天它开始将该地址重定向到 b21
  • 如何获取两个地点之间的行驶距离?

    我在我的应用程序中使用 GoogleMapv2 api 我想绘制一条从源到目的地的多边形线 并在地图活动上显示旅行时间和距离 但我无法找到它 请帮我 我的代码片段在这里 public class NavigationActivity ext
  • 为什么新的网络版 Dropbox 可以在不刷新页面的情况下更改 URL? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在不离开页面的情况下更改浏览器中显示的 URL 如何像 GitHub 一样进行出色的无刷新页面更改 更改浏览器 URL 和页面内容 无需重新加载且无需使用片段 太神奇了 新的 Dropbox 网页
  • Win32 和 Win64 机器中的 SendInput 按键

    我在 xp 32 位下使用 sendInput 使用 web 服务来推送当前焦点窗口的 F 5 现在在 Vista win64 下我无法获得这个结果 有些文章指出使用 4 位或 8 位的 uint 问题 但这并不能通过差异编译和 Field
  • 求二叉树的直径

    我试图在java中找到二叉树的直径 包含最大节点数的树中任意两个节点之间的路径长度 我的代码片段 public int diametre Node node int d if node null return 0 lh diametre n
  • 使用正确的 pack:// URI 格式

    我有一个 WPF 类库 其中包含一个包含图像的文件夹 图像 在 WPF 应用程序中 我不会使用以下方式引用该文件夹中的图像
  • 在哪里可以找到要添加为参考的 Microsoft.VisualStudio.ExtensionManager?

    我想在使用 VS2013 SDK 安装的 VS2013 中的控制台应用程序上添加以下引用 Microsoft VisualStudio ExtensionManager Microsoft VisualStudio ExtensionMan
  • Xcode 6.1 文件中缺少所需的架构 X86_64

    在 Xcode 6 1 中 我收到 iPhone 6 iPhone 5s iOS 7 1 的错误 其中显示 Undefined symbols for architecture x86 64 OBJC CLASS ClientAuthent
  • 如何在画布上制作弹跳球的动画

    你好 我刚刚开始编写 Java 和 HTML 等代码 所以有时我会遇到困难 因此 我加入 StackOverflow 寻求您的帮助 请对我好一点 我正在尝试使用动画setInterval 并绘制方法来创建一个弹跳球 该球在每帧中移动多个像素
  • OPENCV waitKey()方法返回类型

    我正在尝试使用在线教程学习 OPENCV 用于图像处理项目 opencv 文档说 waitKey 返回一个 int 这应该是按下的键的 ASCII 值 但大多数在线教程都使用以下代码 可以正常编译和运行 if char 27 waitKey
  • Python XML 解析和 getElementsByTagName

    我试图解析以下 xml 并围绕我的业务需求获取我感兴趣的特定标签 我想我做错了什么 不知道如何解析我所需的标签 想要利用 pandas 以便我可以进一步过滤细节 学弟学妹们多多支持 我的 XML 来自 URI
  • Clojure core.logic CLP(FD) 投影 FD 变量

    我正在使用 Clojure 的 core logic CLP FD 库 core logic 版本 0 8 3 开发一种简单的方形打包算法 正方形表示如下 x11 y11 x12 y12 x21 y21 x22 y22 每个正方形表示为其左
  • 如何防止 scanf() 永远等待输入字符?

    我想在控制台应用程序中完成以下任务 如果用户输入一个字符 应用程序将执行以下操作 相应的任务 例如 如果用户输入1 该程序 如果用户输入 将执行任务 1q 程序将退出 如果用户没有输入任何内容 程序将每隔10秒执行一次默认任务 时间不必很严
  • 从 Excel VBA 关闭 Word 应用程序

    我试图在宏开始时关闭所有打开的 Word 应用程序实例 尽管我不知道哪些文档已打开 并且无法将它们设置为对象 这将关闭所有正在运行的 Word 文档 你需要On Error Resume Next以防止在没有运行 Word 应用程序实例时出
  • 如何从webview中获取html内容?

    从 webview 获取 html 代码的最简单方法是什么 我尝试了stackoverflow和google的几种方法 但找不到确切的方法 请说一下具体的方法 public class htmldecoder extends Activit