【问题标题】:Create an overall header(how to)创建一个整体标题(如何)
【发布时间】:2014-11-09 15:58:04
【问题描述】:

我知道这个问题不会很受欢迎,但我搜索了很长时间,但找不到任何东西,可能没有使用正确的关键字。

我拥有一个在线广播电台,我想创建一个 js 播放器,一旦添加到网站中,该播放器将保留在该网站所有域的标题中。我第一次在 tumblr 音乐播放器(http://scmplayer.net/) 上看到这个东西,你可以将他们的代码添加到你的页面中,一旦打开,即使你浏览到博客的其他子页面,播放器也会作为标题保留。 我正在寻找这个在论坛中使用,您经常更改您的页面,您无法使用内置的广播播放器收听任何内容。

我找到了一个类似的解决方案,方法是使用一个按钮打开一个非常小的播放器弹出窗口,但我想知道是否有可能做我想做的事,以及如何做。

即使是要搜索的正确链接、查询或术语也会对我有很大帮助,我不希望有人为我这样做,只要以正确的方式指出我。

编辑:: 这是我忘记提及的一些东西。我正在尝试构建一个代码,用户可以将粘贴复制到他们的网站并让它工作。 如果只是为了我,我就不会在这里,因为我也通过 iframe 和 jquery 来加载内容(参见 www.r4ge.ro)。 我不能指望其他人篡改他们的网站只是为了在其中嵌入我的收音机,我不能 iframe 他们的网站内容并将我的收音机添加为索引,因为这会破坏 google 排名和索引。

【问题讨论】:

    标签: javascript html flash


    【解决方案1】:

    有多种方法可以做到这一点,这里只有一种!

    首先,我个人会使用backbone.js -backbone.js 允许您创建可以独立于另一个更新的“部分”视图。对于您的方案,创建header 视图然后创建content 视图似乎是理想的。

    标题和内容都可以有自己的逻辑,并在您指定和控制的不同时间更新。

    查看http://backbonetutorials.com/why-would-you-use-backbone/ 以开始使用。准备好充足的时间来阅读和学习大量教程。 Backbone 需要时间来提升,但一旦你掌握了它,你就会做出一些很棒的应用程序!

    【讨论】:

    • 我正在研究这个,它看起来非常有趣,尤其是因为我在当前项目中使用了大量的 jquery 和 div。
    【解决方案2】:

    你基本上有三个选择:

    1. 您找到的那个,打开一个非常小的弹出窗口(可能只显示媒体控件),因此当用户导航时,它不会受到页面被拆除的影响。

    2. 使用框架也是一样。

    3. 在导航而不是实际导航时使用 ajax 加载内容也是如此。

    由于您不太喜欢#1,让我们看看#2,然后再回到#3。

    当用户打开播放器时,你真的会进入一个带有播放器的页面和一个非常大的iframe 以及其余内容:

    <!doctype html>
    <html>
    <head>
    <!-- ... -->
    </head>
    <body>
    <!-- player here -->
    <iframe class="main" src="main.html"></iframe>
    </body>
    </html>
    

    您可以使用 CSS 尽可能地无缝连接。为了使其可链接,您可以在 URL 中使用一个大片段,这是应该进入框架的页面的 URL,例如:

    http://example.com/#forum.html&amp;section=23

    当您的主页加载时,您抓取片段,并将其用作iframe 上的src

    您可以在 iframe 上侦听导航事件并更新主窗口上的哈希片段,以便书签工作,和/或在您网站的每个页面上都有可能被导航到的 JavaScript 告诉容器页面(@ 987654326@) 它的 URL 是什么。

    #3 与 #2 类似,只是不是让导航以正常方式发生,而是在用户单击时通过 ajax 加载所有内容,将其加载到(比如说)主要内容 div 而不是 iframe .这也可以使用散列片段来确保它完全可链接/可添加书签等,但需要重写加载页面中的所有链接,以便它们更新散列片段而不是主 URL。

    #2 和#3(和#1)各有优缺点。 #1 可能是最少的工作。 #2 可能排在第二位,然后是 #3,但我可能会落后。

    这是#2 的一个快速而肮脏的版本,它轮询哈希更新,以便框架中加载的页面根本不需要知道任何关于此的内容。请注意,您必须提供给其他人的只是页面;他们的页面保持不变。如果他们担心页面排名,他们会希望在标记中包含其页面的规范 URL。

    withplayer.html:

    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Example</title>
    <style>
    html, body {
        padding: 0;
        margin: 0;
    }
    html {
        height: 100%;
        box-sizing: border-box;
    }
    *, *:before, *:after {
        box-sizing: inherit;
    }
    body {
        height: 100%;
        position: relative;
    }
    div.player {
        height: 30px;
        padding: 2px;
    }
    iframe.content {
        border: none;
        position: absolute;
        top:30px;
        width: 100%;
        /*bottom: 0px; Sigh, this works on elements other than iframe, see 'resize' JavaScript below */
    }
    </style>
    </head>
    <body>
    <div class="player"></div>
    <iframe class="content"></iframe>
    <script>
    (function() {
        // Fill in our "player"
        var dt = new Date().toISOString();
        document.querySelector(".player").innerHTML =
            "This div is our pretend player: The div was loaded on " +
            dt.substring(0, 10) + " at " + dt.substring(11, 19) + ".";
    
        // Get the iframe
        var content = document.querySelector(".content");
    
        // Listen for hash changes
        window.onhashchange = loadContent;
    
        // Load any initial hash we have
        loadContent();
    
        // Get our current hash, without the leading #
        function getHash() {
            return location.hash.replace(/^#/, '');
        }
    
        // Get the hash equivalent of the current content in the content iframe
        function getContentHash() {
            var loc, hash;
    
            loc = content && content.contentWindow && content.contentWindow.location;
            hash = loc && loc != "about:blank" ? loc.pathname + loc.search + loc.hash : undefined;
            return hash;
        }
    
        // Load the content for the current hash
        function loadContent() {
            // If we have an initial hash, apply to the iframe
            var hash = getHash();
            if (hash) {
                content.src = hash;
            }
        }
    
        // Poll for changes to the frame's location, update our hash if
        // it doesn't match
        setInterval(pollContent, 100);
    
        function pollContent() {
            var newHash;
    
            newHash = getContentHash();
            if (newHash !== undefined && newHash !== getHash()) {
                location.hash = "#" + newHash;
            }
        }
    
        // Stoopid iframes won't stick to the bottom, have to resize their height
        resize();
        window.onresize = resize;
        function resize() {
            content.style.height = (window.innerHeight - 30) + "px";
        }
    })();
    </script>
    </body>
    </html>
    

    【讨论】:

    • @AronH.:选项 #2 仍然可行,您只需给他们页面并告诉他们确保他们在元标记中提供其内容的规范 URL;他们的页面没有变化(除了添加一个按钮来打开播放器)。我已经发布了一个示例。
    • 我不能这样做,我不能修改他们的页面。我想我会坚持弹出窗口和一些 javascript 技巧,毕竟我设置了 chrome 扩展,也许人们会开始安装它
    • @AronH.:再说一遍:不需要修改他们的页面。您将此页面发送给他们(经过更多调试和完整的版本),他们将其与他们的现有页面一起使用,不变(除了他们使用规范元标记的建议)。
    • 好吧,但是他们需要将索引更改为此页面,不是吗?
    • @AronH.: 仅当他们希望播放器自动打开时。 (呃,在上面,我应该说他们需要改变他们的页面来添加规范的URL 来添加一个打开播放器的方法。)
    猜你喜欢
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2020-06-08
    • 2021-07-05
    • 2020-07-19
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    相关资源
    最近更新 更多