【问题标题】:How to stop the latter part of javascript from being called?如何阻止javascript的后半部分被调用?
【发布时间】:2014-11-24 02:32:03
【问题描述】:

如果用户的屏幕宽度小于 699,我想将用户重定向到我的移动网站。

我正在使用 document.location.href 来做到这一点。重定向工作正常,但问题是有时会在重定向发生之前加载桌面的 css。

[编辑]

似乎这是很自然的事情。进一步执行 html 代码,直到它实际被重定向。但就我而言,我不希望它发生。那么如何阻止我的 html 加载图像和 javascripts 等,以防它必须重定向?

对于 CSS,我认为正如 cmets 中所说,媒体可以完成这项工作。

我有以下 HTML 代码:

<html>
<head>
<script>
if(screen.width<699)
{
     document.location.href="http://m.example.com";
}
</script>
<link rel="stylesheet" type="text/css" href="/css/6e0a22.css?v1.3a" />
</head>
<body>
HELLO WORLD
</body>
</html>

【问题讨论】:

  • 如果样式表被缓存,浏览器将在重新加载页面的 HTTP 请求完成之前访问它。
  • 你不能假设 Javascript 重定向会停止执行页面上的所有内容——据我所知,确切的行为是未定义的。一种解决方案是添加一个else 子句,并且只将样式表注入到其中的文档中......?
  • 您可以在样式标签上使用媒体查询来阻止它加载:&lt;link rel="stylesheet" media="(min-width: 700px)"
  • 我同意 LcSalazar 的观点,即@media 是要走的路。但是,如果您不想这样做,另一个不太理想的选择是在文档准备好/页面加载后重定向。
  • =( 抱歉,我试过了。如果我有更多想法,我会告诉你。

标签: javascript html css url-redirection


【解决方案1】:

尝试使用 javascript window.stop() 阻止浏览器呈现 css。

测试:
1. 访问:w3schools.com/tags/tryit.asp?filename=tryhtml_link_tag
2.添加window.stop();标签下方
3. 再次单击提交按钮,样式和文本不再呈现。
4. 可选:在 js window.stop() 方法之前添加另一个以仔细检查行为。 (它应该呈现)

注意:Window.stop() 方法不适用于 IE,请使用 window.document.execCommand('Stop');反而。 有关此方法的更多信息,请访问此处:http://www.w3schools.com/jsref/met_win_stop.asp

这里发布了很多很好的建议,但这应该可以解决问题的意图。

【讨论】:

    【解决方案2】:

    许多选项:

    1. 使用 CSS 媒体查询根据特定条件选择显示的内容
    2. 如果可能,让服务器处理重定向。您可以尝试通过用户代理来做到这一点
    3. 通过 JavaScript 而不是 HTML 元素动态创建/加载 CSS 和页面的其余部分
    4. 不要重定向,而是使用一个空的门户/登陆页面,将流量引导到相应的网站

    【讨论】:

    • 1) OP 想要的不仅仅是加载不同的 CSS。 2)服务器不检测屏幕宽度,UAs可以被欺骗。 4) 谷歌不赞成在着陆页上进行重定向,因此你的排名会受到很小的影响(假设 OP 关心 SEO)。
    • 您只是发布边缘案例还是试图争论?其中很多都可以被欺骗。 JS可以关闭。这是应该考虑的事情吗?当然。此外,它过去对 SEO 很重要,现在不确定是否如此,但对于 301/302 HTTP 重定向来说更是如此,谷歌也改变了它的排名引擎。如果它是 AJAX 负载(不是重定向),那么我应该更不重要。
    • 两者都不是。很多东西都可以被欺骗......但这只是评论的一小部分。 JS可以关闭...但是为什么呢?网络上的很多东西都依赖它,它只是没有意义。仍然很重要。是的,尤其是对于 301 和 302。我的 SEO 家伙很擅长跟上这些东西。是的,如果整个初始加载是一个 AJAX 请求,那么这是可以接受的……除了 GoogleBot 不加载 JS。因此,您的目标网页......负责获得流量的页面......实际上对排名毫无价值。 ;) 当然您可以使用元标记,但 Google 会解析实际的页面内容。
    • 在互联网上进行快速搜索后,事实证明 GoogleBot 对 JS 有基本支持(截至 2010 年),这意味着我确信它从那时起已经发展。所以...如果它使用 AJAX,我将撤回关于毫无价值的登陆页面的声明。是的......这可能是一个可行的选择。 ;)
    • 我认为 2013 年左右有更多最近的文章讨论了 Google SEO 以及 JS 是如何不那么重要的因素。 OP 还需要注意桌面浏览器已被尖叫然后调整为更宽的宽度。
    【解决方案3】:

    因为获取新资源需要时间,在此期间,浏览器只是继续。

    此外,服务器可能会向http://m.example.com 请求返回204 No Content 响应,在这种情况下,当前页面将保持显示和活动状态。

    【讨论】:

    • 如何让完整的执行等待响应?
    • @dragosrsupercool 如果屏幕宽度小于 700 像素,请在样式表中放置媒体查询以禁用所有样式。 (无论如何,如果您对媒体查询进行所有操作,对您的网站和用户来说可能会更好。)
    • @Pointy:没错!但它不仅仅是关于样式表,我想停止所有可能的执行,直到我有回应。
    • @dragosrsupercool - 我不确定这是否可能。您必须停止/阻止解析器。如果这样做,您还将停止处理 http://m.example.com 响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2020-11-11
    • 2020-09-21
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多