Все зависит от того, сколько разных удаленных почтовых клиентов вы сможете поддерживать. Я считаю, что известные библиотеки Delphi, поддерживающие SMTP / Mime, будут выполнять разумную работу, но они могут оставить вам проблемы с поддержкой, когда один из ваших почтовых пользователей обнаруживает, что их получатель не может видеть правильно отформатированное электронное письмо.
Я рекомендую посетить сайт Jacob Palme , который даст вам представление о некоторых проблемах, с которыми вы можете столкнуться. Возможно, это немного устарело, но в целом, однако вы создаете и отправляете сложную электронную почту MIME, вы столкнетесь с одним или несколькими почтовыми клиентами, которые не могут правильно обработать синтаксис. На сайте также есть ссылки на некоторые полезные примеры конструкций, которые вы можете проверить и проверить.
Я не хочу подразумевать, что вам нужно сворачивать свою собственную логику так же, как и мы: хорошее упакованное решение, вероятно, будет успех в подавляющем большинстве случаев. Мы писали наш собственный код Delphi, чтобы справиться с этим несколько лет назад, поэтому я оставлю его другим, чтобы предоставить вам самую последнюю информацию о том, что сейчас находится на полке.
Я, наконец, получил это самостоятельно после некоторого чтения. Трудно, когда вы ничего не знаете о javascript и когда документ довольно тонкий по этому вопросу. Вот мое решение, надеюсь, что это поможет другим:
С HTML-страницей, содержащей две кнопки в конце:
<div>
<button type="button" id="ok" style="font-weight: 700; margin-right: 20px;" onclick="validClick();">J'accepte</button>
<button type="button" id="no" onclick="refuseClick();">Je refuse</button>
</div>
Я отправляю событие щелчка на javascript в верхней части моей HTML-страницы:
<script language="javascript">
function validClick()
{
valid.performClick();
document.getElementById("ok").value = "J'accepte";
}
function refuseClick()
{
refuse.performClick();
document.getElementById("no").value = "Je refuse";
}
</script>
valid
и refuse
- это два java-объекта, которые я прошел через интерфейс javascript, чтобы использовать их методы. Таким образом, в java я создал две кнопки (не отображаемые в Activity, только здесь для их методов и являются тенями кнопок HTML:
valid = new Button(ctx);
valid.setOnClickListener(this);
refuse = new Button(ctx);
refuse.setOnClickListener(this);
Затем я добавил javascript к своему WebView
:
// Enablejavascript
WebSettings ws = wv.getSettings();
ws.setJavaScriptEnabled(true);
// Add the interface to record javascript events
wv.addJavascriptInterface(valid, "valid");
wv.addJavascriptInterface(refuse, "refuse");
И, наконец, обработайте события щелчка в методе onClick:
@Override
public void onClick(View v) {
if (v.equals(valid)) {
//do Something
} else if (v.equals(refuse)) {
//do Something else }
}
Надеюсь, это поможет некоторым людям
Вот более простое решение. На стороне Java создайте прослушиватель для каждой кнопки. Он не должен быть каким-либо конкретным классом, так как метод будет искать с помощью отражения:
WebSettings ws = wv.getSettings();
ws.setJavaScriptEnabled(true);
wv.addJavascriptInterface(new Object()
{
public void performClick()
{
// Deal with a click on the OK button
}
}, "ok");
Затем в HTML вызовите его непосредственно из тега кнопки:
<button type="button" onclick="ok.performClick();">OK</button>
Button
заставит людей думать, что между ними есть связь, но нет. Код не заботит, привязываете ли вы свой JavaScript к Button
или Bitmap
или к обычной Object
. Он будет вызывать любую функцию, о которой вы говорите. Вы не получаете доступ к дополнительным методам. Например, вызов setText()
на вашем Java Button
объекте не изменит текст ваших HTML-кнопок.
– Steve Blackwell
5 April 2013 в 05:04
WebView browser = new WebView(this);
browser.getSettings().setJavaScriptEnabled(true);
browser.loadUrl("file:///android_asset/page.html");
setContentView(browser);
WebSettings ws = browser.getSettings();
ws.setJavaScriptEnabled(true);
browser.addJavascriptInterface(new Object()
{
@JavascriptInterface // For API 17+
public void performClick(String strl)
{
Toast.makeText (MainActivity.this, strl, Toast.LENGTH_SHORT).show();
}
}, "ok");
page.html файл
<html>
<body>
First name: <input type="text" name="fname" id="txtfname"><br>
Last name: <input type="text" name="lname" id="txtlname"><br>
<script>
function getValues() {
document.getElementById("btnOK").value = document.getElementById("txtfname").value+" "+document.getElementById("txtlname").value;
}
</script>
<button type="button" value="" id="btnOK" onclick="getValues();ok.performClick(this.value);">OK</button>
</body>
</html>
Если вы также хотите получить значение кнопки.
Java:
WebSettings ws = wv.getSettings();
ws.setJavaScriptEnabled(true);
wv.addJavascriptInterface(new Object()
{
@JavascriptInterface // For API 17+
public void performClick(String strl)
{
stringVariable = strl;
Toast.makeText (YourActivity.this, stringVariable, Toast.LENGTH_SHORT).show();
}
}, "ok");
HTML:
<button type="button" value="someValue" onclick="ok.performClick(this.value);">OK</button>