相关疑难解决方法(0)

Mobile Safari后退按钮

我发现的问题与这个问题非常相似,只是台式机上的Safari似乎已经解决了这个问题.基本上,问题是:当客户端浏览移动版Safari并且页面在pagea.html上执行javascript函数时,然后导航到pageb.html,然后按后退按钮返回pagea.html,javascript函数当客户端按下后退按钮返回pagea.html时,将不会运行.它将跳过javascript调用.

我已经尝试过上面链接中提到的解决方案,但似乎没有什么适用于移动Safari.还有其他人遇到过这个bug吗?你是怎么处理的呢?

javascript safari

36
推荐指数
1
解决办法
3万
查看次数

防止Safari 5中的后退按钮上的缓存

截至最近的safari 5已经发布,结果导致我的网站出现了一些问题.我有一个运行经典ASP的动态网站(虽然这应该不重要),并且该网站对历史堆栈有一些创造性的使用.例如,您可以在列出产品的页面上,然后转到有关产品的详细信息并更改产品(admin-view).单击产品上的"保存"时,信息将通过AJAX发送到服务器,并history.back()发出a.这适用于所有浏览器(包括safari <= 4),但是,在新发布的Safari 5中它停止工作.似乎当您在safari 5中单击它实际上并不刷新页面时,它只会从缓存中加载它,这意味着不会显示在详细信息视图中所做的更改.我怎样才能在safari 5中进行这项工作呢?这是我必须关闭缓存的当前代码(包含在每个页面的顶部):

Dim pStr
pStr = "private, no-cache, no-store, must-revalidate"
Response.AddHeader "pragma","no-cache"      '?
Response.AddHeader "cache-control", pStr    '?  Er ikke sikker på om disse 3 siste er nødvendige.
Response.AddHeader "cache-control", "post-check=0, pre-check=0"     '?  Er ikke sikker på om disse 3 siste er nødvendige.
Response.AddHeader "Expires", "Mon, 26 Jul 1997 05:00:00 GMT"       '?
Response.AddHeader "Last-Modified", Now()
Run Code Online (Sandbox Code Playgroud)

safari cache-control

23
推荐指数
2
解决办法
2万
查看次数

如何刷新后退按钮点击页面?

我使用.htaccess将我的所有流量路由到单个index.php文件.下面的代码用于指示流量,但由于某种原因,它不能与后退按钮一起使用.我不知道如何让后退按钮工作.我已经尝试了各种各样的东西,谷歌搜索了一点,没有一个有效,所以我希望有人在这里可以提供帮助!

<?php
   if(isset($_GET['parameters'])) {
      if($_GET['parameters'] == "repair")
         include 'repair.html';
      else if($_GET['parameters'] == "training")
         include 'training.html';
      else if($_GET['parameters'] == "products")
         include 'products.html';
      else if($_GET['parameters'] == "about")
         include 'about.html';
      else if($_GET['parameters'] == "employees")
         include 'employees.html';
      else if($_GET['parameters'] == "training")
         include 'training.html';
      else if($_GET['parameters'] == "newaccount")
         include 'newaccount.html';
      else if($_GET['parameters'] == "contact")
         include 'contact.html';
      else if($_GET['parameters'] == "recommended")
         include 'recommended.html';
      else if($_GET['parameters'] == "careers")
         include 'careers.html';
      else
         include 'home.html';
   }
   else
      include 'home.html';
?>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已尝试过但未能使用: window.onbeforeunload body onunload=""

必须有办法onunload=location.reload()或某事!不知何故必须知道语法!!

javascript php ajax .htaccess jquery

23
推荐指数
5
解决办法
9万
查看次数

Safari浏览器缓存如何触发componentDidMount?

componentDidMount()在Safari中返回时,即使从未卸载过组件,React 16触发器也是如此。如何知道何时安装?

class Foo extends React.Component {
  state = {
    loading: false
  }

  componentDidMount() {
    // when going back in safari
    // triggers in react 16, but not in 15.3 or preact
    console.log('mounted');
  }

  componentWillUnmount() {
    // will never trigger
    console.log('will unmount');
  }

  leave() {
    this.setState({
      loading: true
    });
    setTimeout(() => {
      window.location.href = 'https://github.com/';
    }, 2000);
  }

  render() {
    return this.state.loading ? <div>loading...</div> : <button onClick={this.leave.bind(this)}>leave</button>;
  }
}
Run Code Online (Sandbox Code Playgroud)

背景

Safari使用bfcache。如果返回,它将从缓存中获取最后一页。

当使用react 15.3或preact之类的库时,离开页面不会触发componentWillUnmount,返回页面也不会触发componentDidMount

此行为会导致多个问题-例如,loading …

javascript safari reactjs preact

10
推荐指数
1
解决办法
354
查看次数

如何防止Safari加载按钮缓存?

我注意到我的网络应用程序中浏览器后退按钮使用的一个常见错误,在登出后点击后退按钮加载用户出现登录的缓存页面(尽管它们实际上并非如此).

我找到了很多有用的问题和有用的答案,并使用了建议的修复人员,包括标题中建议的Cache-Control选项的每个组合:

('Cache-Control', 'no-cache, no-store, must-revalidate, max-age=0, max-stale=0')
Run Code Online (Sandbox Code Playgroud)

并且标题适用于大多数浏览器,即使只有no-cache和no-store,但没有标题选项可以在Safari上解决这个问题.

果然,我可以找到解决这个问题的最可靠的方法就是使用一些强制重新加载的javascript:

<script>
            window.onpageshow = function(event) {
                if (event.persisted) {
                    window.location.reload();
                }
            };
</script>
Run Code Online (Sandbox Code Playgroud)

上面的javascript块确实有效,但前提是用户不通过Safari - > Preferences - > Security禁用javascript,然后点击后退按钮.这是一个非常优秀的边缘案例,但我有点着迷,这样一个流行的浏览器制作这样一个微不足道的bug这个棘手!

如果有人找到了一种方法,让Safari在没有javascript的情况下玩得很好,我很想听听.提前谢谢!

html javascript safari caching

6
推荐指数
0
解决办法
1205
查看次数

*onbeforeunload* 是否缓存在 Safari (macOS) 上?

beforeunload 按照惯例在我的 JS/ReactJS 应用程序中添加了一个事件列表。该函数根据内部unSaved状态添加确认对话框。

在 Chrome 和 Firefox(macOS/桌面)上一切正常。

然而,在 Safari 上:

  • 第一次“我使用”事件处理程序(我离开页面时unSaved==true),它按预期工作正常,
  • 然而,在随后尝试使用 离开页面时unSaved==true,Safari 根本不要求任何确认。
  • 当我转到一个新选项卡(具有相同的先前 URL)时,第一次再次有效,随后的时间则不...

更奇怪的是:我可以看到我添加的事件函数实际上每次在 safari 上都被调用,因为console.log每次确实都在打印测试。

我唯一可能的猜测是 Safari 以某种方式缓存了我对该选项卡的确认响应?(?)

关于如何解决这个问题的任何想法?

我的堆栈:

Safari: Version 10.0.1 (12602.2.14.0.7) macOS: 10.12.1 (16B2657) host: localhost protocols: tested on both, http and https

更多信息:

  • 事件pageshow的属性persisted始终设置为 false。因此,Safari 的页面缓存 (BFCache) 不应该是问题的原因。

javascript safari macos caching reactjs

3
推荐指数
1
解决办法
3019
查看次数

标签 统计

javascript ×5

safari ×5

caching ×2

reactjs ×2

.htaccess ×1

ajax ×1

cache-control ×1

html ×1

jquery ×1

macos ×1

php ×1

preact ×1