184

我希望 home.html 加载<div id="content">

<div id="topBar"> <a href ="#" onclick="load_home()"> HOME </a> </div>
<div id ="content"> </div>
<script>
      function load_home(){
            document.getElementById("content").innerHTML='<object type="type/html" data="home.html" ></object>';
  }
</script>

当我使用 Firefox 时,这很好用。当我使用谷歌浏览器时,它要求插件。如何让它在 Google Chrome 中运行?

4

16 回答 16

232

我终于找到了我的问题的答案。解决方案是

function load_home() {
     document.getElementById("content").innerHTML='<object type="text/html" data="home.html" ></object>';
}
于 2013-07-14T19:16:44.337 回答
70

您可以使用 jQuery 加载功能:

<div id="topBar">
    <a href ="#" id="load_home"> HOME </a>
</div>
<div id ="content">        
</div>

<script>
$(document).ready( function() {
    $("#load_home").on("click", function() {
        $("#content").load("content.html");
    });
});
</script>

对不起。编辑点击而不是加载。

于 2013-07-14T04:34:58.213 回答
66

获取 API

function load_home (e) {
    (e || window.event).preventDefault();

    fetch("http://www.yoursite.com/home.html" /*, options */)
    .then((response) => response.text())
    .then((html) => {
        document.getElementById("content").innerHTML = html;
    })
    .catch((error) => {
        console.warn(error);
    });
} 

XHR API

function load_home (e) {
  (e || window.event).preventDefault();
  var con = document.getElementById('content')
  ,   xhr = new XMLHttpRequest();

  xhr.onreadystatechange = function (e) { 
    if (xhr.readyState == 4 && xhr.status == 200) {
      con.innerHTML = xhr.responseText;
    }
  }

  xhr.open("GET", "http://www.yoursite.com/home.html", true);
  xhr.setRequestHeader('Content-type', 'text/html');
  xhr.send();
}

根据您的约束,您应该使用 ajax 并确保在调用该load_home()函数的标记之前加载您的 javascript

参考 - 大卫沃尔什

MDN - 使用 Fetch

JSFIDDLE 演示

于 2013-07-14T04:54:08.970 回答
36

以现代 Javascript 方式获取 HTML

这种方法利用了现代 Javascript 功能async/await,例如fetchAPI。它将 HTML 下载为文本,然后将其提供给innerHTML您的容器元素。

/**
  * @param {String} url - address for the HTML to fetch
  * @return {String} the resulting HTML string fragment
  */
async function fetchHtmlAsText(url) {
    return await (await fetch(url)).text();
}

// this is your `load_home() function`
async function loadHome() {
    const contentDiv = document.getElementById("content");
    contentDiv.innerHTML = await fetchHtmlAsText("home.html");
}

await (await fetch(url)).text()可能看起来有点棘手,但很容易解释。它有两个异步步骤,您可以像这样重写该函数:

async function fetchHtmlAsText(url) {
    const response = await fetch(url);
    return await response.text();
}

有关更多详细信息,请参阅获取 API 文档

于 2018-09-15T22:18:05.770 回答
21

我看到了这个,觉得它看起来很不错,所以我对它进行了一些测试。

这似乎是一种干净的方法,但就性能而言,与使用 jQuery 加载函数或使用 XMLHttpRequest 的 vanilla javascript 方法加载页面所花费的时间相比,它的性能落后了 50%,两者大致相似。

我想这是因为在后台它以完全相同的方式获取页面,但它还必须处理构建一个全新的 HTMLElement 对象。

总之,我建议使用 jQuery。该语法尽可能易于使用,并且它有一个结构良好的回调供您使用。它也相对较快。普通方法可能会快几毫秒,但语法令人困惑。我只会在无法访问 jQuery 的环境中使用它。

这是我用来测试的代码 - 它相当简陋,但多次尝试后的时间非常一致,所以我会说每种情况下精确到 +- 5ms 左右。测试是从我自己的家庭服务器在 Chrome 中运行的:

<!DOCTYPE html>
<html>
<head>
    <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
</head>
<body>
    <div id="content"></div>
    <script>
        /**
        * Test harness to find out the best method for dynamically loading a
        * html page into your app.
        */
        var test_times  = {};
        var test_page   = 'testpage.htm';
        var content_div = document.getElementById('content');

        // TEST 1 = use jQuery to load in testpage.htm and time it.
        /*
        function test_()
        {
            var start = new Date().getTime();
            $(content_div).load(test_page, function() {
                alert(new Date().getTime() - start);
            });
        }

        // 1044
        */

        // TEST 2 = use <object> to load in testpage.htm and time it.
        /*
        function test_()
        {
            start = new Date().getTime();
            content_div.innerHTML = '<object type="text/html" data="' + test_page +
            '" onload="alert(new Date().getTime() - start)"></object>'
        }

        //1579
        */

        // TEST 3 = use httpObject to load in testpage.htm and time it.
       function test_()
       {
           var xmlHttp = new XMLHttpRequest();

           xmlHttp.onreadystatechange = function() {
                if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
                {
                   content_div.innerHTML = xmlHttp.responseText;
                   alert(new Date().getTime() - start);
                }
            };

            start = new Date().getTime();

            xmlHttp.open("GET", test_page, true); // true for asynchronous
            xmlHttp.send(null);

            // 1039
        }

        // Main - run tests
        test_();
    </script>
</body>
</html>
于 2015-09-19T17:37:26.413 回答
6

尝试

async function load_home(){
  content.innerHTML = await (await fetch('home.html')).text();
}

async function load_home() {
  let url = 'https://kamil-kielczewski.github.io/fractals/mandelbulb.html'

  content.innerHTML = await (await fetch(url)).text();
}
<div id="topBar"> <a href="#" onclick="load_home()"> HOME </a> </div>
<div id="content"> </div>

于 2019-03-29T17:36:07.040 回答
5

使用时

$("#content").load("content.html");

然后记住你不能在本地“调试”chrome,因为 XMLHttpRequest 无法加载——这并不意味着它不起作用,它只是意味着你需要在同一个域上测试你的代码。你的服务器

于 2014-04-15T09:48:44.743 回答
5

您可以使用 jQuery :

$("#topBar").on("click",function(){
        $("#content").load("content.html");
});
于 2015-05-22T10:00:50.737 回答
3
$("button").click(function() {
    $("#target_div").load("requesting_page_url.html");
});

或者

document.getElementById("target_div").innerHTML='<object type="text/html" data="requesting_page_url.html"></object>';
于 2018-10-31T11:26:08.120 回答
1
<script>
var insertHtml = function (selector, argHtml) {
$(document).ready(function(){

    $(selector).load(argHtml);
 
});
var targetElem = document.querySelector(selector);
    targetElem.innerHTML = html;
};

var sliderHtml="snippets/slider.html";//url of slider html
var items="snippets/menuItems.html";
insertHtml("#main",sliderHtml);
insertHtml("#main2",items);
</script>

当我尝试将一段 HTML 代码添加到我的 main.html 时,这个对我有用。请不要忘记在您的代码传递类或 id 中添加 ajax 作为选择器,并将 HTML 片段的链接添加为argHtml

于 2020-11-15T17:15:09.247 回答
0

github上有这个插件可以将内容加载到元素中。这是回购

https://github.com/abdi0987/ViaJS

于 2015-08-08T11:07:28.630 回答
0

当您想要包含 header.php 或任何页面时,通常需要这样做。

在 Javascript 中这很容易,特别是如果您有 HTML 页面并且不想使用 php 包含函数,但您应该编写 php 函数并将其作为 Javascript 函数添加到脚本标记中。

在这种情况下,您应该在没有函数的情况下编写它,后跟名称 Just。脚本使用功能词并启动包含 header.php,即将 php 包含函数转换为脚本标记中的 Javascript 函数,并将所有内容放在该包含文件中。

于 2018-10-31T11:38:32.833 回答
0

使用这个简单的代码

<div w3-include-HTML="content.html"></div>
<script>w3.includeHTML();</script>
</body>```
于 2019-12-27T17:27:37.220 回答
0

我使用jquery,我发现它更容易

$(function() {
    $("#navigation").load("navbar.html");
});

在一个单独的文件中,然后在 html 页面上加载 javascript 文件

于 2021-11-18T18:19:23.217 回答
-4

显示隐藏.html

<!DOCTYPE html>
<html>
    <head>
      <script type="text/javascript">
        function showHide(switchTextDiv, showHideDiv)
        {
          var std = document.getElementById(switchTextDiv);
          var shd = document.getElementById(showHideDiv);
          if (shd.style.display == "block")
          {
            shd.style.display = "none";
            std.innerHTML = "<span style=\"display: block; background-color: yellow\">Show</span>"; 
          }
          else
          {
            if (shd.innerHTML.length <= 0)
            {
              shd.innerHTML = "<object width=\"100%\" height=\"100%\" type=\"text/html\" data=\"showhide_embedded.html\"></object>";
            }
            shd.style.display = "block";
            std.innerHTML = "<span style=\"display: block; background-color: yellow\">Hide</span>";
          }
        }
      </script>
    </head>
    <body>
      <a id="switchTextDiv1" href="javascript:showHide('switchTextDiv1', 'showHideDiv1')">
        <span style="display: block; background-color: yellow">Show</span>
      </a>
      <div id="showHideDiv1" style="display: none; width: 100%; height: 300px"></div>
    </body>
</html>

showhide_embedded.html

<!DOCTYPE html>
<html>
    <head>
      <script type="text/javascript"> 
        function load()
        {
          var ts = document.getElementById("theString");
          ts.scrollIntoView(true);
        }
      </script>
    </head>
    <body onload="load()">
      <pre>
        some text 1
        some text 2
        some text 3
        some text 4
        some text 5
        <span id="theString" style="background-color: yellow">some text 6 highlight</span>
        some text 7
        some text 8
        some text 9
      </pre>
    </body>
</html>
于 2014-06-06T20:03:00.260 回答
-4

如果您的 html 文件位于本地,则使用 iframe 而不是标签。标签不能跨浏览器工作,主要用于 Flash

例如:<iframe src="home.html" width="100" height="100"/>

于 2017-02-17T10:38:45.077 回答