0

使用this gist阻止链接启动浏览器时,该网站被保存为主屏幕Web应用程序。脚本导致连接到呼叫服务器两次

脚本在某种程度上正在工作。问题是由于某种原因,它正在调用目标页面两次。这会导致Jquery Mobile在每次加载页面时都显示error loading page,尽管页面已成功加载。

下面是一个例子链接:

<a href="/bookings/3/features" data-ajax="false">Link Example</a> 

下面是从服务器日志:

Started GET "/bookings/3/features" for 10.104.4.210 at 2012-03-02 17:13:25 +0000 
Processing by FeaturesController#index as HTML 
    Parameters: {"booking_id"=>"3"} 
    Booking Load (0.3ms) SELECT `bookings`.* FROM `bookings` WHERE `bookings`.`id` = 3 LIMIT 1 
    Car Load (0.2ms) SELECT `cars`.* FROM `cars` WHERE `cars`.`id` = 2 LIMIT 1 
    CarModel Load (0.2ms) SELECT `car_models`.* FROM `car_models` WHERE `car_models`.`id` = 1 LIMIT 1 
    Manufacturer Load (0.2ms) SELECT `manufacturers`.* FROM `manufacturers` WHERE `manufacturers`.`id` = 1 LIMIT 1 
    Feature Load (0.3ms) SELECT `features`.* FROM `features` WHERE `features`.`car_model_id` = 1 
    (0.2ms) SELECT COUNT(*) FROM `car_colours` WHERE `car_colours`.`car_model_id` = 1 
    Rendered features/index.html.erb within layouts/frontEnd (5.2ms) 
    Rendered shared/_footer.html.erb (1.1ms) 
Completed 200 OK in 62ms (Views: 56.8ms | ActiveRecord: 1.4ms) 


Started GET "/bookings/3/features" for 10.104.4.210 at 2012-03-02 17:13:25 +0000 
Processing by FeaturesController#index as HTML 
    Parameters: {"booking_id"=>"3"} 
    Booking Load (0.4ms) SELECT `bookings`.* FROM `bookings` WHERE `bookings`.`id` = 3 LIMIT 1 
    Car Load (0.2ms) SELECT `cars`.* FROM `cars` WHERE `cars`.`id` = 2 LIMIT 1 
    CarModel Load (0.2ms) SELECT `car_models`.* FROM `car_models` WHERE `car_models`.`id` = 1 LIMIT 1 
    Manufacturer Load (0.2ms) SELECT `manufacturers`.* FROM `manufacturers` WHERE `manufacturers`.`id` = 1 LIMIT 1 
    Feature Load (0.3ms) SELECT `features`.* FROM `features` WHERE `features`.`car_model_id` = 1 
    (0.2ms) SELECT COUNT(*) FROM `car_colours` WHERE `car_colours`.`car_model_id` = 1 
    Rendered features/index.html.erb within layouts/frontEnd (4.5ms) 
    Rendered shared/_footer.html.erb (1.1ms) 
Completed 200 OK in 26ms (Views: 20.8ms | ActiveRecord: 1.3ms) 

回答

2

问题是,jQuery Mobile尝试优化页面加载并通过执行ajax而不是常规页面加载来最小化请求。这导致第一个请求由jQuery移动生成,而jQuery等待返回时,“stay_standalone”脚本触发并以常规http页面加载加载页面。

您可以在这两个链接中看到与此功能相关的jQuery Mobile代码:first in the init,然后checking for ajax flag and finally making a request。这也是in jQuery Mobile's global config docs

我在独立模式下搜索了一下jQuery Mobile,但没有找到具体的东西。有两个解决方案来解决这个难题:

  1. 删除您的网站/ web应用程序的要点。这可能是一个足够的解决方案,因为jQuery Mobile已经为你做了ajax--并且链接不会在Safari中打开。此外,这可能会更快,请求更少。
  2. 如果如预期这不起作用,你可以禁用jQuery Mobile的的ajaxEnabled功能,就如同他们的文档中描述:

    的$(document).bind( “mobileinit”,函数(){ ajaxEnabled:假 });

第二个选项不是最优的,但可能是一个很好的解决方案,直到您确定jQuery Mobile如何防止在Mobile Safari中加载页面。

+0

有一个链接,我需要脚本来处理。如果我这样做,我是该死的,如果我不这样做,该死! – 2012-03-03 08:45:37

0

不能完全确定这一点,但你应该确保你的脚本返回false?