Android 在WebView中通过javascript获取网页源码,并在TextView或者在EditText中显示问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 在WebView中通过javascript获取网页源码,并在TextView或者在EditText中显示问题相关的知识,希望对你有一定的参考价值。

webview js之间的交互,项目中马上用到。

JS调用java代码效果图

 

java代码调用javasrcipt代码效果图


index.html代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd";><html><head>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    <script type="text/javascript" language="javascript">        var share = JSON.stringify("title": "sinodata",
"desc": "ios",
"shareUrl": "http://www.sinodata.com.cn"
);

function sendInfoToJava()
window.androidWebView.showInfoFromJs(share);


<!--在android代码中调用此方法-->
function showInfoFromJava(msg)
alert("showInfoFromJava:"+msg);
   </script></head><body la><div id=\'b\'>    <input onclick="sendInfoToJava()" type="button" value="sendInfoToJava"/></div></body></html>
布局代码:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_    android:layout_    android:orientation="vertical"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.chenjifang.webview.MainActivity">    <Button        android:id="@+id/test_btn"        android:text="代码中调用web js代码传递参数"        android:layout_        android:layout_ />    <EditText        android:id="@+id/test_edt"        android:layout_        android:layout_ /><WebView    android:id="@+id/test_webview"    android:layout_    android:layout_></WebView></LinearLayout>
java代码:

public class MainActivity extends AppCompatActivity private WebView mWebView;    @Override    protected void onCreate(Bundle savedInstanceState)        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);         mWebView = (WebView) findViewById(R.id.test_webview);        //设置WebView支持JavaScript        mWebView.getSettings().setJavaScriptEnabled(true);        mWebView.loadUrl("file:///android_asset/index.html");        mWebView.addJavascriptInterface(new JsInterface(this), "AndroidWebView");        //添加客户端支持        mWebView.setWebChromeClient(new WebChromeClient());        findViewById(R.id.test_btn).setOnClickListener(new View.OnClickListener()            @Override            public void onClick(View v)
sendInfoToJs();            
);        private class JsInterface        private Context mContext;        public JsInterface(Context context)            this.mContext = context;                //在js中调用window.AndroidWebView.showInfoFromJs(name),便会触发此方法。        @JavascriptInterface        public void showInfoFromJs(String share)
Toast.makeText(mContext, share, Toast.LENGTH_SHORT).show();        
   //在java中调用js代码    public void sendInfoToJs()
String msg = ((EditText)findViewById(R.id.test_edt)).getText().toString();        //调用js中的函数:showInfoFromJava(msg)        mWebView.loadUrl("javascript:showInfoFromJava(\'" + msg + "\')");    
总结下,java代码中要设置webview对javascript的支持,addJavascriptInterface(new JsInterface(this), "AndroidWebView");//这句代码中的第二个参数是在js访问方法的地址。
window.AndroidWebView.showInfoFromJs(share);

参考技术A 用富文本插件吧 GitHub 搜 android+richtext

如何在 Swift 中从 NSData 显示 PDF - 如何将 PDF 保存到文档文件夹 Swift - 如何在 Swift 中通过 WebView 从保存的 NSData 显示 PDF

【中文标题】如何在 Swift 中从 NSData 显示 PDF - 如何将 PDF 保存到文档文件夹 Swift - 如何在 Swift 中通过 WebView 从保存的 NSData 显示 PDF【英文标题】:How to show PDF from NSData in Swift - how to save PDF to documents folder Swift - how to display PDF from saved NSData via WebView in Swift 【发布时间】:2016-08-05 15:06:17 【问题描述】:

我有一个 PDF,我从以 NSData 形式出现的服务器中提取,现在我需要显示它。我已经广泛寻找解决方案,但我还没有找到任何可以弥合原始 NSData 和实际保存或显示 PDF 之间差距的东西。

我试过了,但现在我不知道如何保存或显示:

let cfData = CFDataCreate(kCFAllocatorDefault, UnsafePointer<UInt8>(data.bytes), data.length)                                                
let cgDataProvider = CGDataProviderCreateWithCFData(cfData)
let cgPDFDocument = CGPDFDocumentCreateWithProvider(cgDataProvider)

【问题讨论】:

你可以看看这个:- ***.com/a/53393855/5857254 你可以看看这个:- ***.com/a/53393855/5857254 【参考方案1】:

首先,NSData IS 您的 PDF,目前无需转换为另一种数据类型或使用库来操作它。

现在,只需将 NSData 保存到 iOS 上的文档目录即可,它不是像 CoreData 或 Realm 那样的托管持久存储,也不是 UserDefaults。这是一个文件夹,里面有东西。

保存到文档文件夹:

let data = //the stuff from your web request or other method of getting pdf    
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
let filePath = "\(documentsPath)/myCoolPDF.pdf"
data.writeToFile(filePath, atomically: true)

现在验证文件是否存在并在您的 Mac 上打开它。这是为了确保您保存的是实际的 PDF 而不是其他任何内容。这是一个两步过程。首先通过从 iOS 模拟器打印文档文件夹的位置来找出文件到底去了哪里:

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentsDirectory = paths[0]
print(documentsDirectory)

现在复制那个很长的文件路径和终端中的cd [paste location] 去那里,然后open myCoolPDF.pdf 在预览中打开它!这是神奇的时代!

现在您已经验证了您正在处理的是一个实际的 PDF,是时候在 WebView 中显示它了,因为它非常简单,除非您有自己的方法。

请注意,您仍然必须制作它以便显示 webview,将一个拖到情节提要中的 viewController 上并为其创建一个 IBOutlet。

let url = NSURL(fileURLWithPath: filePath)
let webView = UIWebView()
webView.loadRequest(NSURLRequest(URL: url))

显然,这是确保您掌握基本知识的一种快速方法,您不想使用 ! 强制不安全地展开。

【讨论】:

如果这是一个问答,以供将来参考,请尽量不要使不必要的事情复杂化。 NSURL(string: "file://" + urlStringPDF!)! 的结果正是您在 url 变量中已有的结果。这使得大部分“重要”部分过时了。 – 也使用URLByAppendingPathComponent 代替字符串连接来构建文件路径。 file:// 在我使用 .path 从 URL 获取字符串的方法时被剥离,在我的实现中,我将字符串传递给另一个上下文中的 webview跨度> true 在这种情况下您可能不需要附加file:// filePath 是一个字符串,url 是对应的 URL,到目前为止一切顺利。然后let urlStringPDF = url.path 再次给你filePathNSURL(string: "file://" + urlStringPDF!)! 再次给你url。不需要最后两次转换。 已编辑,如果您不赞成,请调整投票【参考方案2】:

从 iOS 11 开始,您不需要 Web 视图,并且可以使用专用的 PDFKit 框架。使用 PDFKit 从 URLData 实例加载 PDF 可以很简单:

import PDFKit

// some other code here
// ...

let pdfView = PDFView()

// add pdfView to the view hierarchy and possibly add auto-layout constraints
// ...

pdfView.document = PDFDocument(data: data)

查看PDFKit documentation了解更多详情。

【讨论】:

【参考方案3】:

更新:

Xcode 8.1 斯威夫特 3.0.1

用于将文件保存到文档目录。

let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let path = "\(documentPath)/filename.pdf"
yourData.write(toFile: path, atomically: true)

用于检索文档目录的路径。

let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = paths[0]

在这里,您可以在文件名前附加反斜杠。 并且你可以测试你的文件是否存在那里。

【讨论】:

以上是关于Android 在WebView中通过javascript获取网页源码,并在TextView或者在EditText中显示问题的主要内容,如果未能解决你的问题,请参考以下文章

Android 在WebView中通过javascript获取网页源码,并在TextView或者在EditText中显示问题

如何在flutter中通过webview下载/创建pdf

在 Swift 中通过 WebView 下载 .pdf 或 .ppt

Android:WebView 触摸事件监听器

如何在 Swift 中从 NSData 显示 PDF - 如何将 PDF 保存到文档文件夹 Swift - 如何在 Swift 中通过 WebView 从保存的 NSData 显示 PDF

Android与Javascript交互