2016-01-26 41 views
16

Ho una visualizzazione Web nel mio programma UWP che funziona BENE per quando clicco su un pulsante che normalmente si apre in una nuova finestra (popup).Come posso aprire i popup nella stessa WebView (non una nuova finestra) in Windows UWP?

Quando faccio clic su un pulsante che normalmente si apre in una nuova finestra, voglio solo che si apra nella stessa WebView, ma si apre nel mio browser predefinito. C'è un settaggio che posso impostare per risolvere il problema?

Aggiornamento:

ho risposto alla mia domanda iniziale. Ho aggiunto un gestore di eventi NewWindowRequested, aprii la

args.uri 

nella stessa WebView e poi disse

e.handled=true 

Ho un nuovo problema però ed è probabilmente solo con jeopardy.com. Sto cercando di creare un "Watson" che farà domande su google, ma quando apro il test di pratica, non inizia mai.

Quindi in pratica nella mia WebView vado a https://www.jeopardy.com/be-a-contestant/practice-tests e faccio clic su Prendi il test di pratica. Quando apre le nuove finestre, il timer non inizia mai. Immagino che stiano cercando di impedire alle persone di usare i programmi per le loro domande. Qualcuno ha una soluzione?

Anche Funziona in vantaggio per me

enter image description here

A differenza del Webview che assomiglia (lato destro)

enter image description here

pensi che possa avere a che fare con un funzione javascript o dimensione di Windows?

UPDATE2:

Per tutti coloro che vuole aiutare, ecco un repo github:

https://github.com/SethKitchen/JeopardyWinner

+0

Desktop Edge non si avvia il timer o, in modo forse questo è il problema del motore di Edge? Anche WebView in UWP lo usa. –

+0

@ Syn-McJ Funziona a bordo per me –

+0

Bene, vedo la stessa immagine in controllo webview e Edge, quindi scommetto che il problema è lì, ma probabilmente non si riproduce sempre. –

risposta

0

si sta sviluppando un App UWP, quindi azioni JavaScript all'interno di un Webview rendering di un sito web doesn avere lo stesso comportamento come se fossero stati resi nei browser web. Forse dovresti sviluppare un'app con il tuo codice HTML e script. In questo modo si evitano i rischi per la sicurezza

+0

Grazie, ma ho bisogno di utilizzare le funzionalità OCR disponibili solo per Windows 10 Universal –

+0

In tal caso, non provare ad aprire un popup Web, aprire una finestra di dialogo nativa –

+0

Si prega di delineare –

1

Ho dato un'occhiata al problema. In realtà, è necessario inizializzare la seconda pagina, con alcuni dati creati nella prima pagina. Se si accede direttamente alla seconda pagina (https://www.jeopardy.com/be-a-contestant/practice-test-client) con un browser standard, si avrà lo stesso comportamento di quello presente nell'applicazione UWP.

Se avete lanciato lo strumento di debug del tuo browser (F12), si vedrà che gli script principali sono:

Quindi, sono riuscito ad avviare il timer iniettando del contenuto nella seconda pagina usando la console del debugger (l'ho provato con Firefox). Ecco i passaggi per eseguire (copiare/incollare il tutto nella vostra console ed eseguirlo):

var s = document.createElement("script");s.type = "text/javascript";s.src = "https://www.jeopardy.com/Assets/jeopardy/easyxdm/exdm_helper.js";$("head").append(s); 

s.src = "https://www.jeopardy.com/Assets/jeopardy/js/main.js";$("head").append(s); 

s.src = "https://www.jeopardy.com/Assets/jeopardy/js/practice_test_launcher.js";$("head").append(s); 

backendUserCheck(); test_launcher.init();test_launcher.testWindow = window; 

$('body').append('<div data - testfile = "/Assets/jeopardy/json/test_practice_2011.json" data - testid = "1" class="button launch_practice_test" data-testtype="adult">Take the practice test</div>'); 

var button = $('.launch_practice_test');test_launcher.testQuestionsFile = button.attr('data-testfile');test_launcher.testType = button.attr('data-testtype');test_launcher.testTitle = button.attr('data-testtitle');test_launcher.testID = button.attr('data-testid'); 

testModule.parentRef=test_launcher; 

testModule.deleteLocalStorage(); 
testModule.checkLocalStorage(); 
testModule.getLocalStorage(); 
testModule.testID = testModule.parentRef.getTestID(); 
testModule.testType = testModule.parentRef.getTestType(); 
testModule.testFile = testModule.parentRef.getFile(); 
testModule.hardwareTest = testModule.parentRef.checkIfDryRun(); 

testModule.sendTestStart(); 

trace = function(){}; 

trace = { 
    output : true, 
    queue : [], 

    push : function(data) 
    { 
     trace.queue.push(data); 
     if(trace.output) 
     { 
      trace.post(); 
     } 
     return 
    }, 

    post : function() 
    { 
     $.each(trace.queue, function(i,arr) 
     { 
      trace.log(arr); 
     }); 
     trace.queue = []; 
     return 
    }, 

    dump : function() 
    { 
     trace.post(); 
     return 
    }, 

    log  : function(data) 
    { 
     if (!window.console){ console = {log: function() {}} }; 
     console.log(data); 
     return 
    } 
}; 

testModule.loadQuiz(); 
testModule.parentRef=test_launcher; 
testModule.startDate = testModule.parentRef.getStartDateInMS(); 

Questo codice di inizializzazione viene estratto dagli eventi onload o metodi Init della 2 script principali, che ho menzionato in precedenza . Il timer è stato scomposto ma le domande non vengono visualizzate in seguito. Penso che manchi qualche codice da alertParent e setTestData situato in practice_test_client.js. Ti lascio fare il debug della pagina web e trovare i metodi necessari per l'esecuzione.

Per farlo funzionare nel tuo UWP, devi inserire questi dati nella tua vista web. Per questo, si può provare il metodo InvokeScriptAsync o scaricare la pagina con HttpClient e aggiungere il comando di inizializzazione in esso prima di caricare la pagina risultante nel vostro WebView:

del browser
string content = ""; 
using (HttpClient client = new HttpClient()) 
{ 
    content = await client.GetStringAsync(new Uri("https://www.jeopardy.com/be-a-contestant/practice-test-client")); 
} 
+0

Grazie, questo sembra utile. Se si scoprono tutti i "metodi necessari per l'esecuzione", modificare questo post e contrassegnerò come soluzione –

+0

Ho aggiornato la mia risposta con i passaggi completi per caricare il quiz e avviare il test completo. –

+0

Non riuscivo a far funzionare la soluzione. Se hai tempo e/o vuoi aiutare, ho fatto un repo qui: https://github.com/SethKitchen/JeopardyWinner –