2011-12-30 31 views
27

Trên trang web trên điện thoại di động của tôi. Tôi đã cố gắng tải quảng cáo Adsense Mobile, nhưng họ tiếp tục chiếm toàn bộ trang sau khi trang tải chính nó.Làm thế nào để vô hiệu hóa Ajax trong jQuery Mobile trước khi tải trang?

Tôi đã tìm ra rằng nếu tôi tắt ajax, trang sẽ tải tốt cùng với quảng cáo. Điều này chỉ hoạt động trên trang thứ hai tôi tải vì tôi nhấp vào liên kết có thẻ ...

data-ajax="false" 

Điều này làm cho trang tiếp theo tải hoàn hảo.

Vấn đề: Trang đầu tiên được tải sẽ bị ghi đè bởi quảng cáo adsense vì ajax được bật (tôi nghĩ).

Về cơ bản phần đầu của trang web của tôi trông như thế này ...

<html> 
<head> 

<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0rc3/jquery.mobile-1.0rc3.min.css" /> 
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script> 
<script src="http://code.jquery.com/mobile/1.0rc3/jquery.mobile-1.0rc3.min.js"></script> 
<script language="text/javascript"> 

     $(document).bind("mobileinit", function() { 

      $.mobile.ajaxEnabled = false; 

     }); 

</script> 
</head> 
<body> 

    <div data-role="header"> 
     <h1>Angry Birds Cheats</h1> 
    </div> 



    <div data-role="content"> 

<div> 
    <script type="text/javascript"><!-- 
    // XHTML should not attempt to parse these strings, declare them CDATA. 
    /* <![CDATA[ */ 
    window.googleAfmcRequest = { 
    client: '', 
    format: '', 
    output: '', 
    slotname: '', 
    }; 
    /* ]]> */ 
//--></script> 
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_afmc_ads.js"></script> 
</div> 

tôi đã cố gắng vô hiệu hóa ajax trong các mã, nhưng tôi không nghĩ rằng đó là bởi vì quảng cáo vẫn chiếm toàn bộ trang ...

Tôi đã nghĩ rằng có lẽ tôi có thể bắt đầu khách truy cập tại một trang nhất định và chuyển hướng họ đến trang không phải là ajax.

+0

Xin lỗi tôi không có nhiều thời gian để xem xét đầy đủ câu hỏi của bạn, nhưng không phải là nó tốt hơn để thiết lập '$ .mobile.ajaxEnabled = false; 'không gói nó trong trình xử lý' mobileinit'. Điều này đã làm việc cho tôi. Có thể có một số cạm bẫy? Có ai biết không? – user907860

Trả lời

57

Kiểm tra-out các tài liệu để gắn kết với mobileinit sự kiện: http://jquerymobile.com/demos/1.0/docs/api/globalconfig.html

Cụ bit này:

Bởi vì sự kiện mobileinit được kích hoạt ngay lập tức khi thực hiện, bạn sẽ cần để ràng buộc sự kiện của bạn xử lý trước khi jQuery Mobile được tải.

Đây là định dạng phù hợp để gắn kết với mobileinit sự kiện:

<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0rc3/jquery.mobile-1.0rc3.min.css" /> 
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script> 
<script type="text/javascript"> 
$(document).bind("mobileinit", function() { 
    $.mobile.ajaxEnabled = false; 
}); 
</script> 
<script src="http://code.jquery.com/mobile/1.0rc3/jquery.mobile-1.0rc3.min.js"></script> 

Đầu tiên jQuery Core (nên .bind() sẽ có sẵn), sau đó xử lý mobileinit sự kiện, sau đó các jQuery Mobile js file (điều này là cuối cùng để xử lý sự kiện cho mobileinit sẽ được đặt trước khi sự kiện được kích hoạt).

Bạn có thể kiểm tra rằng trình xử lý sự kiện mobileinit hiện tại của bạn không kích hoạt bằng cách đặt alert trong hàm.

+1

Hoàn hảo! Cảm ơn Jasper. – Joe

+0

Hoàn hảo - Tôi gặp vấn đề tương tự với tiêu đề Vị trí HTTP được AJAXified :-(- tất nhiên bạn không thể đặt thuộc tính rel = "external" trên tiêu đề ... –

+0

Làm việc cho tôi khi 'hành động' thuộc tính trên một biểu mẫu được chuyển hướng đến một trang không có giao diện người dùng jQuery và ajax đã buộc các kiểu giao diện người dùng jQuery vào nó – SpyderScript

5

được cập nhật tài liệu hướng dẫn jQuery Mobile là ở đây: http://jquerymobile.com/test/docs/api/globalconfig.html

Không giống như các dự án jQuery khác, chẳng hạn như jQuery và jQuery UI, jQuery Mobile tự động áp dụng nhiều cải tiến đánh dấu càng sớm càng nó tải (lâu trước khi sự kiện document.ready cháy). Những cải tiến này được áp dụng dựa trên các thiết lập mặc định của jQuery Mobile, được thiết kế để làm việc với các kịch bản phổ biến. Nếu cần thay đổi cài đặt, chúng sẽ dễ cấu hình.

Sự kiện mobileinit

Khi jQuery Mobile bắt đầu, nó kích hoạt sự kiện mobileinit trên đối tượng tài liệu. Để ghi đè cài đặt mặc định, hãy liên kết với mobileinit.

$(document).on("mobileinit", function(){ 
    //apply overrides here 
}); 

Vì sự kiện di động được kích hoạt ngay lập tức, bạn sẽ cần ràng buộc trình xử lý sự kiện của mình trước khi jQuery Mobile được tải. Liên kết đến tệp JavaScript của bạn theo thứ tự sau:

<script src="jquery.js"></script> 
<script src="custom-scripting.js"></script> 
<script src="jquery-mobile.js"></script> 

Bạn có thể ghi đè cài đặt mặc định bằng cách mở rộng đối tượng $ .mobile bằng phương thức $ .extend của jQuery.

$(document).on("mobileinit", function(){ 
    $.extend( $.mobile , { 
    foo: bar 
    }); 
}); 

Hoặc, bạn có thể đặt chúng bằng cách sử dụng ký hiệu thuộc tính đối tượng.

$(document).on("mobileinit", function(){ 
    $.mobile.foo = bar; 
}); 
+0

Có vẻ như mobileinit does't làm việc trong 1.4.5.Tôi chỉ cần đặt $ .mobile.ajaxEnabled = false; – ymakux

1

Một trang hữu ích để hiểu jquery mobile hành vi ajax

http://jquerymobile.com/test/docs/pages/page-links.html

Để kích hoạt chuyển trang hoạt hình, tất cả các liên kết trỏ đến một trang bên ngoài (ví dụ. Products.html) sẽ được nạp qua Ajax.

Liên kết trỏ đến các miền khác hoặc có thuộc tính rel = "external", data-ajax = "false" hoặc thuộc tính đích sẽ không được tải bằng Ajax. Thay vào đó, các liên kết này sẽ gây ra làm mới toàn trang mà không có chuyển đổi động. Cả hai thuộc tính (rel = "external" và data-ajax = "false") đều có cùng tác dụng, nhưng ý nghĩa ngữ nghĩa khác: rel = "external" nên được sử dụng khi liên kết đến một trang hoặc miền khác, trong khi data-ajax = " false "rất hữu ích khi chỉ chọn một trang trong miền của bạn để được tải thông qua Ajax.

0

Vô hiệu hóa một tác phẩm giải pháp mỗi trang tuyệt vời với dữ liệu ajax = "false" trên thẻ Neo

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