Datei öffnen Dialog, öffnen ohne Button

strukturart

Erfahrenes Mitglied
Hallo,

ich schreibe gerade mein erstes Html5/JS App für KaiOs.
Da ich in diesem App ganz auf einen Mauszeiger verzichten möchte,
wird alles über das Keypad gesteuert.

Nun möchte ich den Datei öffnen Dialog mittels einer function() öffnen.
Drückt man z.B. auf die Nr. 5 auf dem Keypad wird diese ausgeführt.

Ist das möglich
oder wegen der Sicherheit nicht ?

Gruss John
 
meint du sowas ?
Javascript:
<script>

document.getElementsByTagName('body')[0].addEventListener("keypress", KeyCode);

function KeyCode(event) {
 if(event.which==53 || event.which==13){// Taste 5  oder ENTER
alert(event.which+' Taste gedrückt')
 }
}


</script>
 
Wenn ich das richtig sehe, wird das Gerät durch Touch bedient und dann sollten die touchstart- und touchend-Events feuern bei Berührung der Softtasten.
 
Ich glaube, jetzt verstehe ich es besser, dies ist das Kernproblem:
es geht mir um darum ohne input field einen Datei öffnen Dialog zu starten.
Wie es ohne input geht, weiß ich nicht, aber Du könntest mit der jQuery-Funktion trigger() auf das Input einen Klick simulieren, dann sollte sich der Datei-Öffnen-Dialog öffnen. Ob dieses OS das zulässt, müsste man testen.
 
Ich habe es jetzt anders gelöst.
Ich liste alle möglichen Dateien als Html Elemente und navigieren dann mit tabindex -> focus()
 
Ist ja schön wenn du ein Lösung gefunden hast die Funktioniert. Könntestdu den Code mal posten ?Weil deine Lösung interesiert mich und vieleicht kann man anhand der Lösung auch noch nee andere Lösung finden
 
Damit liste ich alle .json Dateien
Code:
function startFinder(search_string,MapOrTrack)
{
    map_or_track = MapOrTrack;
    i = -1;
    //get file list
    var finder = new Applait.Finder({ type: "sdcard", debugMode: true });
    finder.search(search_string);
    $("div#finder").empty();

    finder.on("searchBegin", function (needle)
    {
        alert("search startet")
    });

    finder.on("searchComplete", function (needle, filematchcount)
    {
    if(filematchcount == 0)
    {
        $('div#finder-error').css('display','block')
        $('div#finder-error').text('no file found')
        setTimeout(function()
        {
            $('div#finder-error').css("display","none");
        }, 4000);
    }

        if(filematchcount > 0)
    {
        $('div#finder').css('display','block')
        $('div#finder').find('div.items[tabindex=0]').focus();
    }


    });

    

    finder.on("fileFound", function (file, fileinfo, storageName)
    {
        finderNav_tabindex++;
        $("div#finder").append('<div class="items" tabindex="'+finderNav_tabindex+'">'+fileinfo.name+'</div>');
        $('div#finder').find('div.items[tabindex=0]').focus();


    });

    


}





function addGeoJson()
{
if ($(".items").is(":focus")) {


    var finder = new Applait.Finder({ type: "sdcard", debugMode: true });
    finder.search($(document.activeElement).text());
    

    finder.on("fileFound", function (file, fileinfo, storageName)
    {
    //file reader

    var mygpx="";
    var reader = new FileReader();




    reader.onerror = function(event)
    {
        alert('shit happens')
        reader.abort();
    };


    reader.onload = function(event)
    {

    };

    reader.onloadend = function (event)
    {

        if(myLayer)
        {
            L.removeLayer(myLayer)
        }

            
        mygpx = event.target.result
        var myLayer = L.geoJSON().addTo(map);
        myLayer.addData(JSON.parse(mygpx));
        
        
    };


    reader.readAsText(file)

    $("div#finder").empty();
    $('div#finder').css('display','none');
    


    });




}

}
 
Allgemein geht das mit JavaScript im Browserkontext aus Sicherheitsgründen natürlich nicht. Aber das ist kein Problem, da der OP sowieso spezifisch für KaiOS entwickelt und es da anscheinend Zugriff auf Dateien gibt.
 
Zurück