来自webview的android html代码
您好,我使用这个示例从webview获取HTML。但是我需要在我的超类中使用它,我不知道怎么做。我只能在AlertDialog上看到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
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}}但不起作用