2012-01-20 75 views
10

Tôi đã đặt nhiều UIWebView s cạnh nhau thành một UIScrollView. Mỗi UIWebView bao gồm chế độ xem "trình duyệt web" hiển thị tệp HTML cục bộ. Thật không may tôi không có ý tưởng làm thế nào để tải các webviews trong nền và đồng thời để ngăn chặn hoặc ngăn chặn các chức năng JavaScript từ thực hiện được bao gồm trong các tập tin HTML. Tôi có nghĩa là bởi "trong nền" khi tôi xem vài tấm đầu tiên và trong khi đó các tấm còn lại chỉ lười biếng tải âm thầm. Tôi thấy các ứng dụng khác nhau (như pugpig) làm điều này - nó tải các trang HTML và dừng hoạt ảnh JavaScript - bằng cách nào đó nó có thể dừng JavaScript để tạo hiệu ứng toàn bộ mờ mà tôi thường xuyên sử dụng trong các trang HTML giữa các công tắc tab và tại thời điểm này Tôi tải bảng điều khiển nó tiếp tục các hình ảnh động mờ dần.Tạm dừng thực thi JavaScript trong UIWebView

Vì vậy, câu hỏi là:

Làm thế nào tôi có thể tạm dừng một hoạt JavaScript và ngăn ngừa các vấn đề bộ nhớ sử dụng mã Objective-C và làm thế nào tôi có thể tiếp tục hoạt hình mờ dần khi tôi hiển thị bảng điều khiển?

Trả lời

4

Các bạn đã thử tiêm JavaScript (ví dụ: - (NSString*) stringByEvaluatingJavaScriptFromString: (NSString *)script) mà quan sát onbluronfocus của window, hoặc pageshowpagehide? This post đề xuất một vài giải pháp cho điều đó.

Vì vậy, bạn có thể thử một cái gì đó giống như

$(window).blur(function(){ 
    // when the web view loses focus 
}); 
$(window).focus(function(){ 
    // when the web view gains focus 
}); 

Nếu thất bại, bạn có thể thử pagehidepageshow sự kiện:

function pageShown(evt) 
{ 
    if (evt.persisted) 
     // The page was just restored from the Page Cache 
    else 
     // The initial load. This is the same as the page load event 
} 

function pageHidden(evt) 
{ 
    if (evt.persisted) 
     // The page was suspended and placed into the Page Cache 
    else 
     // This is the same as the page unload event 
} 

window.addEventListener("pageshow", pageShown, false); 
window.addEventListener("pagehide", pageHidden, false); 
0

lẽ bạn có thể thử đánh giá (sử dụng stringByEvaluatingJavaScriptFromString) một cố-bị lỗi đoạn mã javascript và làm cho thông dịch viên js bị nghẹt thở?

<script> var j =  // note: missing value, error! 
</script> 
1

Tôi đoán bạn có thể kiểm soát hoạt ảnh javascripts chạy trong HTML (bạn nói trang là cục bộ). Những gì tôi sẽ làm là để bọc các hình ảnh động trong một chức năng JS mà sẽ nhận được gọi là từ Cocoa (có tấn tài liệu tham khảo cho rằng trên StackOverFlow ví dụ: - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script).

Sau đó, tôi sẽ tạo ngăn xếp có bản ghi cho từng trang HTML bạn muốn tải chậm. Trên mỗi UIScrollView scrollViewDidScroll: tôi sẽ kiểm tra xem một cuộn trong kích thước của một kích thước toàn bộ webview đã thực hiện nếu như vậy tôi sẽ bật bản ghi đó từ ngăn xếp và gọi hàm startAnimation Javascript mà chúng tôi đã đề cập trước đó trên webview tiếp theo.

Nếu bạn cần giao tiếp hai mặt (từ javascript đến ca cao) ví dụ để cho biết rằng hoạt ảnh đã hoàn tất, bạn có thể sử dụng JSBridge. (How do I call an Objective-C method from JavaScript on UIWebView?)

Các vấn đề liên quan