来自webview的android html代码

来自webview的android html代码,android,html,string,webview,return,Android,Html,String,Webview,Return,您好,我使用这个示例从webview获取HTML。但是我需要在我的超类中使用它,我不知道怎么做。我只能在AlertDialog上看到html,但我不能使用它。如何将其作为字符串返回到主类 final Context myApp = this; /* An instance of this class will be registered as a JavaScript interface */ class MyJavaScriptInterface { @Suppres

您好,我使用这个示例从webview获取HTML。但是我需要在我的超类中使用它,我不知道怎么做。我只能在AlertDialog上看到html,但我不能使用它。如何将其作为字符串返回到主类

final Context myApp = this;  

/* An instance of this class will be registered as a JavaScript interface */  
class MyJavaScriptInterface  
{  
    @SuppressWarnings("unused")  
    public void showHTML(String html)  
    {  
        new AlertDialog.Builder(myApp)  
            .setTitle("HTML")  
            .setMessage(html)  
            .setPositiveButton(android.R.string.ok, null)  
        .setCancelable(false)  
        .create()  
        .show();  
    }  
}  

final WebView browser = (WebView)findViewById(R.id.browser);  
/* JavaScript must be enabled if you want it to work, obviously */  
browser.getSettings().setJavaScriptEnabled(true);  

/* Register a new JavaScript interface called HTMLOUT */  
browser.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");  

/* WebViewClient must be set BEFORE calling loadUrl! */  
browser.setWebViewClient(new WebViewClient() {  
    @Override  
    public void onPageFinished(WebView view, String url)  
    {  
        /* This call inject JavaScript into the page which just finished loading. */  
        browser.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");  
    }  
});  

/* load a web page */  
browser.loadUrl("http://lexandera.com/files/jsexamples/gethtml.html");  
final Context myApp=this;
/*此类的实例将注册为JavaScript接口*/
类MyJavaScriptInterface
{  
@抑制警告(“未使用”)
公共void showHTML(字符串html)
{  
新建AlertDialog.Builder(myApp)
.setTitle(“HTML”)
.setMessage(html)
.setPositiveButton(android.R.string.ok,null)
.setCancelable(错误)
.create()
.show();
}  
}  
最终WebView浏览器=(WebView)findViewById(R.id.browser);
/*如果希望JavaScript正常工作,显然必须启用它*/
browser.getSettings().setJavaScriptEnabled(true);
/*注册一个名为HTMLOUT*/
addJavascriptInterface(新的MyJavaScriptInterface(),“HTMLOUT”);
/*在调用loadUrl之前必须设置WebViewClient!*/
setWebViewClient(新的WebViewClient(){
@凌驾
公共void onPageFinished(WebView视图,字符串url)
{  
/*此调用将JavaScript注入刚刚完成加载的页面。*/
browser.loadUrl(“javascript:window.HTMLOUT.showHTML(“”+document.getElementsByTagName('html')[0]。innerHTML+“”);”;
}  
});  
/*加载网页*/
browser.loadUrl(“http://lexandera.com/files/jsexamples/gethtml.html");  

您不能创建一个全局变量,比如

String globalHtml;
然后在
showHTML
方法中分配它

globalHtml = html;
如果不需要,可以删除
警报对话框
代码。

执行以下操作:

设置网络视图

首先将JavaScriptInterface添加到webView,如下所示。这里的“Android”稍后将用于调用JavaScriptInterface中的函数

  webView = (WebView) findViewById(R.id.webView);
  WebSettings webSettings = webView.getSettings();
  webSettings.setJavaScriptEnabled(true);
  webView.addJavascriptInterface(new JavaScriptInterface(this), "MyAndroid");
JavaScriptInterface类:

 public class JavaScriptInterface {
     Context mContext;
     JavaScriptInterface(Context c) {
         mContext = c;
     }
}
HTML文件:

  <html>
    <head>
    <script type="text/javascript">
    function getValue()
      {
        var x=document.getElementById("content").innerHTML;
        //  alert(x);
        MyAndroid.receiveValueFromJs(x);
      }
    </script>
    </head>
    <body>
    <div id="content">
    This is html content <hr/> 
    Other contents;
    <input type="button" onclick="getValue()" value="Get Content" />
    </div>
    </body>
    </html>
public void receiveValueFromJs(String str) {
  Toast.makeText(mContext, "Received Value from JS: " + str,Toast.LENGTH_SHORT).show();
}
在MyAndroid的JavaScriptInterface中添加回调函数。receiveValueFromJs(val):

  <html>
    <head>
    <script type="text/javascript">
    function getValue()
      {
        var x=document.getElementById("content").innerHTML;
        //  alert(x);
        MyAndroid.receiveValueFromJs(x);
      }
    </script>
    </head>
    <body>
    <div id="content">
    This is html content <hr/> 
    Other contents;
    <input type="button" onclick="getValue()" value="Get Content" />
    </div>
    </body>
    </html>
public void receiveValueFromJs(String str) {
  Toast.makeText(mContext, "Received Value from JS: " + str,Toast.LENGTH_SHORT).show();
}
这里您已经在str变量中返回了HTML

你可以看到我的博客: 详情请参阅


我找到了另一个解决方案:

但我有两个不同的类。html在子类中。我需要退货。感谢这与示例中的相同,用Toast替换AlertDialog。我只想在主类中访问webView.loadUrl之后的html字符串,而不是在类JavaScriptInterface中;script.loadhtml();///类JavaScriptInterface{public string loadhtml(){return html}}但不起作用