[英]Unable to call java methods from phonegap android?
我已經使用phonegap android從html字符串創建pdf文件創建了一個示例應用程序。我在java.Code中編寫了用於創建PDF文件的代碼,
public class PdfGenerator
{
private WebView mAppView;
private DroidGap mGap;
public PdfGenerator(DroidGap gap, WebView view)
{
mAppView = view;
mGap = gap;
}
public void generatePDF()
{
File root = Environment.getExternalStorageDirectory();
File gpxfile = new File(root, "test.pdf");
System.out.println("Path ::::"+gpxfile);
try{
Document document = new Document(PageSize.LETTER);
PdfWriter.getInstance(document, new FileOutputStream(gpxfile));
document.open();
document.addAuthor("Real Gagnon");
document.addCreator("Real's HowTo");
document.addSubject("Thanks for your support");
document.addCreationDate();
document.addTitle("Please read this");
HTMLWorker htmlWorker = new HTMLWorker(document);
String str = "<html><head></head><body>"+
"<a href='http://www.rgagnon.com/howto.html'><b>Real's HowTo</b></a>" +
"<h1>Show your support</h1>" +
"<p>It DOES cost a lot to produce this site - in ISP storage and transfer fees, " +
"in personal hardware and software costs to set up test environments, and above all," +
"the huge amounts of time it takes for one person to design and write the actual content." +
"<p>If you feel that effort has been useful to you, perhaps you will consider giving something back?" +
"<p>Donate using PayPal® to real@rgagnon.com." +
"<p>Contributions via PayPal are accepted in any amount " +
"<P><br><table border='1'><tr><td>Java HowTo<tr>" +
"<td bgcolor='red'>Javascript HowTo<tr><td>Powerbuilder HowTo</table>" +
"</body></html>";
htmlWorker.parse(new StringReader(str));
document.close();
System.out.println("Done");
}
catch (Exception e) {
e.printStackTrace();
}
}
}
我的班級代碼是
public class MainActivity extends DroidGap
{
PdfGenerator pdf;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
super.init();
pdf = new PdfGenerator(this, appView);
appView.addJavascriptInterface(pdf, "PdfGenerator");
super.loadUrl("file:///android_asset/www/test.html");
}
}
Javascript代碼
<html>
<head>
<meta name="viewport" content="width=320; user-scalable=no" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script>
function pdf()
{
document.addEventListener("deviceReady", deviceReady, false);
}
function creatfile()
{
window.PdfGenerator.generatePDF();
}
function deviceReady() {
window.PdfGenerator.generatePDF();
}
</script>
</head>
<body>
<input type="submit" onclick="pdf()" value="IMEI" />
</body>
當我從javascript調用generatePDF時,出現以下錯誤,
Uncaught TypeError: Cannot call method 'generatePDF' of undefined
請幫我。
在DroidGap類內定義一個函數(不會)|(不會)|(不應)將該函數暴露給webview javascript環境,也不會通過Window將成員對象暴露為DOM對象。
您想要的(如Raymond和Larta所示)是編寫一個PDF插件。
通常,您需要1.本機實現,這完全取決於您的插件所針對的平台。 如果是android,您可以找到本機插件
public class PDFWriter extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("generatePDF")) {
// CALL YOUR GENERATE PDF CODE HERE
return true;
}
return false;
}
}
successCB-是成功回調函數failCB-是失敗回調函數 PDFWriter-是您正在調用的本機插件實現generatePDF-是您正在調用args的本機插件函數-要傳遞給本機插件函數的參數數組
請注意,這是一個完整的示例,我省略了JAVA中的import語句以及必要的鈎子。 使用plugman npm模塊為您自動生成這些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.