Ответ 1
Я посмотрел на вашу проблему. Фактически, вам нужно инициализировать вторую страницу, с некоторыми данными, созданными на первой странице. Если вы напрямую переходите ко второй странице (https://www.jeopardy.com/be-a-contestant/practice-test-client) со стандартным браузером, вы будете иметь то же поведение, что и тот, который у вас есть в вашем UWP приложение.
Если вы запустили инструмент отладчика своего браузера (F12), вы увидите, что основные сценарии:
- на первой странице: https://www.jeopardy.com/Assets/jeopardy/js/practice_test_launcher.js
- на второй странице: https://www.jeopardy.com/Assets/jeopardy/js/practice_test_client.js
Итак, мне удалось запустить таймер, введя некоторый контент на второй странице с помощью консоли отладчика (я протестировал это с помощью Firefox). Вот шаги для выполнения (скопируйте/вставьте все это в свою консоль и выполните его):
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();
Этот код инициализации извлекается из событий onload или методов init из 2 основных сценариев, о которых я говорил ранее. Таймер отменяется, но после этого вопросы не появляются. Я думаю, что ему не хватает кода из alertParent и setTestData, расположенного в practice_test_client.js. Я разрешаю вам отлаживать веб-страницу и находить необходимые методы для выполнения.
Чтобы заставить его работать в вашем UWP, вы должны вводить эти данные в свой веб-просмотр. Для этого вы можете попробовать метод InvokeScriptAsync
или загрузить страницу с помощью HttpClient и добавить в нее команду инициализации перед загрузкой результирующей страницы в ваш webView:
string content = "";
using (HttpClient client = new HttpClient())
{
content = await client.GetStringAsync(new Uri("https://www.jeopardy.com/be-a-contestant/practice-test-client"));
}