Что ж, решение [НЕ решение по качеству производства], опубликованное Себастьяном, сработало, но я не мог подтвердить, будет ли загрузка процессора причиной этой проблемы.Я сгенерировал много фоновой нагрузки на хосте iOS и не смог воспроизвести эту проблему.
После дальнейшего изучения проблема рендеринга, похоже, является побочным эффектом оболочки iOS, отменяющей навигацию.Как только навигация iOS отменяется, ядро рендеринга, вероятно, воспримет это как не нужное для рендеринга большего количества пользовательского интерфейса [в основном ничего не рендерится в течение небольшого периода].
Один из способов исправить это -отправлять команды в оболочку iOS в виде параметров хеша (#
) вместо URL.Таким образом, оболочка iOS будет получать команды и не должна отменять навигацию.Этот подход, кажется, работает в тестовом коде ниже.Таким образом, если window.location установлен в location1, он выдает предупреждение «At: 1», а элемент e2 не имеет значения.И если для window.location задано значение location2, оно предупреждает «At: 0», а элемент e2 имеет значение.
@ Кевин, не могли бы вы подтвердить, что вы отменяли навигацию на хосте iOS, когда это произошло.
Тестовый код:
Javascript:
var location1 = "myApp://Test";
var location2 = "#myApp://Test";
$("#change").live("click", function (e) {
var element = document.getElementById("e1");
window.location = location1; var i = 0;
element.innerHTML = "At: " + i;
window.__intervalHandle = window.setInterval(function () {
var html = element.innerHTML;
if (html) {
alert(html);
window.clearInterval(window.__intervalHandle);
window.__intervalHandle = null;
} else {
element.innerHTML = "At: " + ++i;
}
}, 1);
document.getElementById("e2").innerHTML = "Test";
});
Псевдокод iOS:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL* u = [ request URL];
if( [[u scheme] compare:@"myapp" ] == NSOrderedSame) {
{
return NO; // don’t navigate
}
return YES; // navigate
}