كيفية استدعاء الروبوت النشاط من صفحة HTML?

StackOverflow https://stackoverflow.com//questions/21011752

  •  21-12-2019
  •  | 
  •  

سؤال

هذا الرابط يظهر لقطة من مقلدا أين أنا عرض الخريطة في عرض ويب.في تلك الخريطة عندما اضغط على قماش الرابط أريد أن أدعو الروبوت النشاط من صفحة 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: '&copy; <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.

p> تحقق من هذا الرابط لمزيد من التفاصيل

نصائح أخرى

تحقق من هذا 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">
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top