嵌入了HTML的此对象将无法在IE中呈现

时间:2011-05-22 10:25:07

标签: javascript object activex innerhtml getelementbyid

首先,我将声明我的网络编程技巧非常有限。

我希望在试图让这个目标代码正常工作时能得到一些帮助。

我经营一家有多个房源的eBay商店。我提出这样的想法,如果我可以创建左侧的导航菜单(针对不同的产品)作为独立的html文件,并以某种方式获取该数据并将其包含在每个列表中,这意味着我可以简单地更新一个文件和我的所有列表都将有一个更新的导航菜单。

代码似乎在除IE之外的每个浏览器中都能正常工作。这是我使用的代码:

<div id="object">
<object id="Menu" name="Menu" type="text/html" data="http://www.website.com.au/menu.html"></object>
</div>

我真的不确定我需要做些什么才能让它在IE中正常工作。说实话,我根本不理解这一点。

请保持温柔,因为我非常渴望学习。在开始自己的事业之前,我几乎没有任何网页设计技能,我觉得我只是通过向这样的网站学习而走了很长的路。

非常感谢你。

编辑:我决定在没有“text / javascript”部分的情况下测试该页面。我只是将对象元素留在了DIV中。我只留下了这段代码:

<object id=Menu name=Menu type="text/html" data="http://www.website.com./menu.html"></object>

这适用于除IE以外的所有浏览器。我显然不知道我需要使用哪些代码。我认为需要“text / javascript”部分从外部页面调用HTML代码。

编辑2:我发现一些信息表明IE可以支持嵌入了HTML但需要“classid”标记的对象元素。我还用两个不同的版本包装:

"<!--[if IE]>"... <!--[if !IE]> <!-->... etc.

但是,这仍然不起作用。

我还试图用相同的代码(不同的源HTML文件除外)拉入菜单的另一部分(顶部/水平)。

此代码也适用于除IE以外的所有浏览器。奇怪的是IE正试图将应该在左侧的菜单放到顶部,即使没有代码表明它应该这样做......?

在嵌入式html中使用样式信息而不是单独的样式表会导致IE出现问题吗?这不会导致所有其他浏览器出现问题。当然,一旦我使其正常工作,我计划将其分开。

为了澄清我的要求,我说我有100个易趣物品,每个物品都有一个自定义的左侧导航菜单。如果我更改了导航菜单,我需要进入每个列表并手动编辑代码(复制和粘贴)以更新菜单。所以我想保留一个只包含菜单的外部HTML文件,然后使用对象标签或类似的东西将这些信息动态地提取到每个列表中。

请注意,eBay不允许使用iFrame,所以我真的需要一个替代方案。有什么建议吗?

我很乐意向网络开发人员付费以解决这个问题,或者指出我正确的方向,但我不确定与此类型的脚本有什么联系。

3 个答案:

答案 0 :(得分:1)

您似乎正在尝试更新文档对象本身的内部HTML - 包含整个页面的对象,包括易趣信息。

此外,document对象实际上并未显示 - document应该有一个body属性,其中包含页面的实际可见HTML,您应该更新它(可能不会只需用你的文字替换它,但不知何故加入它。)

通常人们会做什么,他们是否在HTML中找到了他们想要将菜单放入其中的部分 - 例如,假设您在所有项目的描述中都包含此HTML:

<div id="menu_object"></div>

然后,您可以通过查找DIV元素并替换为其内部HTML(而不是整个文档的HTML)来向其中添加一些HTML:

function addMenu(which) {
    var myDiv = document.getElementById("menu_object");
    myDiv.innerHTML = '<'+'object id="Menu" name="Menu" type="text/html" data="'+which.href+'"><\/object>';
}

我真的不明白问题的最后几段,但这不是“ActiveX”,Internet Explorer可能会抱怨你试图覆盖文档的整个内容。 “ActiveX”是一种技术,允许人们在尝试访问某些网站时在C中编写在浏览器中运行的程序,并且由于它不安全并且由于其他问题而未在今天使用。

编辑:Laslty,您真正的问题可能是IE不允许使用HTML内容嵌入对象。使用IFRAME标记而不是OBJECT标记来托管外部HTML内容(使用或不使用javascript初始化)可能更好。只需确保设置iframe对象的宽度和高度,因为iframe不会自动展开以适应内容,并且默认大小可能不适合您。

答案 1 :(得分:1)

首先,您收到错误消息吗?查看此消息以及消息指向的代码行总是很有用,您甚至可以自己解决问题。

其次,你不能(或者更确切地说:不应该)在多行上划分字符串。正如您所看到的,语法突出显示混淆了,因此IE的JavaScript引擎也是如此。如果要在多行上传播长字符串文字,请关闭并连接每个部分,例如:

element.innerHTML = '<object id="Menu" name="Menu" type="text/html"' +
                    'data="'+which.href+'"><\/object>';

第三,你不应该改变document的{​​{1}},而是要改变你想要改变的元素。请使用innerHTML

document.getElementById

第四,我认为你的方法是完全错误的:不使用JavaScript即时添加菜单,使用像PHP这样的服务器端脚本来动态插入导航菜单等。如果JavaScript不可用(例如,对于几个搜索引擎和视障人士),用户或机器人不会看到您的菜单,这当然是一个可怕的缺点。

第五,我认为你应该在继续之前阅读一本关于JavaScript的好书。只是我的€0.02。

答案 2 :(得分:0)

问题是IE会在对象标记中发出HEAD请求,但您的服务器只能接受GET请求。

约翰