كيفية استدعاء الروبوت النشاط من صفحة HTML?
سؤال
هذا الرابط يظهر لقطة من مقلدا أين أنا عرض الخريطة في عرض ويب.في تلك الخريطة عندما اضغط على قماش الرابط أريد أن أدعو الروبوت النشاط من صفحة HTML أدناه.
هنا هو رمز HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html
xmlns="http://www.w3.org/1999/xhtml"> <head> <meta
http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>How to parse XML and load data into HTML page</title>
<link rel="stylesheet"
href="http://cdn.leafletjs.com/leaflet-0.7.1/leaflet.css" /> <script
src="http://cdn.leafletjs.com/leaflet-0.7.1/leaflet.js"></script>
<div id="map" class="dark" style="height:250px;"></div>
<div id="latitude"></div> <div id="longitude"></div>
<script type="text/javascript">
function loadXMLDoc(XMLname) {
var xmlDoc;
if (window.XMLHttpRequest) {
xmlDoc=new window.XMLHttpRequest();
xmlDoc.open("GET",XMLname,false);
xmlDoc.send("");
return xmlDoc.responseXML;
} // IE 5 and IE 6
else if (ActiveXObject("Microsoft.XMLDOM")) {
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.load(XMLname);
return xmlDoc;
}
alert("Error loading document!");
return null;
}
</script>
<body>
<script type="text/javascript">
xmlDoc=loadXMLDoc("AddressDetails.xml");
var M = xmlDoc.getElementsByTagName("task");
var i;
for (i=0;i<M.length;i++){
var a = xmlDoc.getElementsByTagName("latitude")[i].childNodes[0].nodeValue;
var b = xmlDoc.getElementsByTagName("logitude")[i].childNodes[0].nodeValue;
var map = L.map('map').setView([a,b],13); break;
}
for (i=0;i<M.length;i++) {
document.write("<div style='width:450px;'>")
document.write("<h2>"+xmlDoc.getElementsByTagName("id")[i].childNodes[0].nodeValue+"</h2>");
document.write("<p>"+xmlDoc.getElementsByTagName("name")[i].childNodes[0].nodeValue+"</p>");
document.write("<p>"+xmlDoc.getElementsByTagName("address")[i].childNodes[0].nodeValue+"</p>");
document.write("<p>"+xmlDoc.getElementsByTagName("mobile")[i].childNodes[0].nodeValue+"</p>");
document.write("<p>"+xmlDoc.getElementsByTagName("assignwork")[i].childNodes[0].nodeValue+"</p>");
document.write("<p>Latitude<span>:</span>"+xmlDoc.getElementsByTagName("latitude")[i].childNodes[0].nodeValue+"</p>");
document.write("<p>Longitude<span>:</span>"+xmlDoc.getElementsByTagName("logitude")[i].childNodes[0].nodeValue+"</p>");
document.write("</div>")
var userName = xmlDoc.getElementsByTagName("name")[i].childNodes[0].nodeValue;
var a = xmlDoc.getElementsByTagName("latitude")[i].childNodes[0].nodeValue;
var b = xmlDoc.getElementsByTagName("logitude")[i].childNodes[0].nodeValue;
var assignwork = xmlDoc.getElementsByTagName("assignwork")[i].childNodes[0].nodeValue;
var userid = i;
alert(userName);
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png',
{
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
// add a marker in the given location, attach some popup content to it and open the popup
L.marker([a,b]).addTo(map)
.bindPopup('<a href="http://www.google.com"></b>Get Direction</b></a><br/><a
href="http://www.google.com">Status</a><br/><a id="issueID'+userid+'"
href="#" onClick="setHtml(this.id)">Canvas</a>').openPopup();
var circle = L.circle([a,b], 500, {
color: 'red',
fillColor: '#f03',
fillOpacity: 0.5
}).addTo(map);
}
map.addLayer(marker);
function setHtml(str) {
alert(str);
var HTML = str;
window.HTMLOUT.showHTML(HTML);
}
</script>
</body>
</html>
فئة النشاط
package com.locationTracker.periscope;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebSettings.RenderPriority;
import android.widget.TextView;
public class MapActivity extends Activity {
@SuppressLint("SetJavaScriptEnabled")
private WebView myWebView;
private TextView mapTextView;
private String url ="file:///android_asset/Map.html";
@SuppressLint("SetJavaScriptEnabled")
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String url = new String("file:///android_asset/Map.html");
setContentView(R.layout.leaflet_map);
this.setTitle("Location Map");
// Obtain the webView by ID
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
}
MyJavaScriptInterface js =new MyJavaScriptInterface();
initComponent();
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
// performance hacks!
webSettings.setRenderPriority(RenderPriority.HIGH);
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
// multi-touch zoom
webSettings.setBuiltInZoomControls(true);
/* webSettings.setDisplayZoomControls(false);*/
myWebView.getSettings().setLoadsImagesAutomatically(true);
myWebView.setWebChromeClient(new WebChromeClient());
myWebView.addJavascriptInterface(js, "Android");
myWebView.setWebViewClient(new WebViewClient());
//myWebView.loadUrl("http://widgets.ign.com/global/wikis/wikimap.html?full=true&?popup=iphone");
myWebView.loadUrl("file:///android_asset/Map.html");
myWebView.setWebViewClient(new WebViewClient());
}
public void initComponent(){
generateId();
}
public void generateId(){
myWebView = (WebView) findViewById(R.id.webView);
mapTextView = (TextView) findViewById(R.id.leafletTV);
}
class MyJavaScriptInterface
{
@SuppressWarnings("unused")
public void showHTML(final String html)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
//MapActivity.this.mapTextView.setText(html);
MapActivity.this.startActivity(new Intent(MapActivity.this, CreateIssue.class));
}
});
}
}
}
المحلول
تحتاج إلى تمرير مثيل فئة لربط جافا سكريبت
giveacodicetagpre.أضف ذلك إلى WebView مع
giveacodicetagpre.نصائح أخرى
تحقق من هذا Stackoverflow
نشاط الاتصال الروبوت SDK WebView
أساسا يمكنك استخدام واجهة JavaScript ل WebView لإطلاق نية نشاط
لبدء النشاط من (ربما) أي متصفح يمكنك إضافة قصد تصفية مثل هذا في AndroidManifest.xml
:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="com.example.myscheme" />
</intent-filter>
ثم إضافة مثل هذا الارتباط إلى الصفحة المطلوبة:
<a href="com.example.myscheme://path/here">
لا تنتمي إلى StackOverflow