【发布时间】:2012-03-09 19:24:42
【问题描述】:
我有以下代码,当嵌入到加载的 html 页面中时可以成功运行:
<HEAD>
<script language="javascript" type="text/javascript">
document.addEventListener('DOMContentLoaded', function ()
{
document.documentElement.addEventListener("touchstart", function (e)
{
if (['A', 'BUTTON'].indexOf(e.target.tagName) === -1)
{
e.preventDefault();
e.stopPropagation();
invokeObjectiveC("ontouchstart:");
}
else
{
e.preventDefault();
e.stopPropagation();
invokeObjectiveC(e.target);
}
}, true);
}, false);
function invokeObjectiveC(action) {
...
}
但是,如果我将其从 html 中取出并尝试单独加载,则它无法正常工作。 单独加载时是这样的:
alert('test');
function addListener()
{
alert('adding listener');
document.addEventListener('DOMContentLoaded', function ()
{
document.documentElement.addEventListener("touchstart", function (e)
{
alert('touchstart');
if (['A', 'BUTTON'].indexOf(e.target.tagName) === -1)
{
e.preventDefault();
e.stopPropagation();
invokeObjectiveC("ontouchstart:");
}
else
{
e.preventDefault();
e.stopPropagation();
invokeObjectiveC(e.target);
}
}, true);
}, false);
}
addListener();
function invokeObjectiveC(action) {
...
}
添加后,会显示“测试”和“添加侦听器”警报对话框,因此我知道这部分正在工作。 但是,该代码不起作用 - 它应该检测屏幕某些部分的触摸(这是在 iOS 上)。 使用 html 中的代码,一切正常,并且在触摸屏幕时执行,当它单独加载时,触摸屏幕时没有任何反应。 任何想法可能是什么问题?
====== 更新 我尝试在生命周期的各个阶段运行以下命令,包括在发出加载页面的请求之前,但从未出现“加载的 Dom 内容”:
var script = document.createElement('script');
script.type = 'text/javascript';
script.text =
var Test =
{
f: function()
{
if (!event.originalTarget.defaultView.frameElement)
{
alert('DOM content loaded');
}
}
}
function addTestListener()
{
alert('adding listener');
window.addEventListener("DOMContentLoaded", function(e) { Test.f(); }, false);
}
document.getElementsByTagName('head')[0].appendChild(script);
【问题讨论】:
-
当您说“单独加载”时,您是什么意思?您是在 DOM 加载后手动加载它吗?如果是这样,那么
DOMContentLoaded事件可能已经触发,因此您的处理程序永远不会被调用。 -
我正在使用一个名为 stringByEvaluatingJavaScriptFromString 的 iOS 函数来执行脚本。我试过在页面加载前后执行它。
标签: javascript html