Javascript代码包含在html中时可以工作,但单独加载/注入时则不能工作
Javascript code is working when contained within html but not when loaded/injected separately
我有以下代码,当嵌入到加载的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 content loaded"从未出现:
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);
根据您对iOS功能的评论,我怀疑在您尝试执行javascript时,文档已经加载。如果是这种情况,那么DOMContentLoaded
事件已经发生,因此代码永远不会初始化。你可以通过检查文档是否已经加载来解决这个问题,方法是将代码更改为:
function addListener() {
alert('adding listener');
function init() {
document.documentElement.addEventListener("touchstart", function (e) {
alert('touchstart');
if (['A', 'BUTTON'].indexOf(e.target.tagName) === -1) {
e.preventDefault();
e.stopPropagation();
invokeObjectiveC("ims-ontouchstart:");
} else {
e.preventDefault();
e.stopPropagation();
invokeObjectiveC(e.target);
}
}, true);
}
if (document.readyState === "complete") {
init();
} else {
document.addEventListener('DOMContentLoaded', init, false);
}
}
addListener();
function invokeObjectiveC(action) {
...
}
我更改了行
函数addListener()
进入
window.onload=函数addListener()
它似乎已经完成了
相关文章:
- JavaScript 无法从单独的文件工作
- 我将此代码移动到一个单独的函数中,它停止工作,为什么
- javaScript代码在一个单独的文件中工作,但不是更大文件的一部分
- 咕噜,任务单独工作,但不分组工作
- 如何将 requireJS 配置放在单独的文件中并使 r.js 优化器工作
- 单独工作的javascript使淋浴演示空白
- 需要哪种体系结构才能允许多个 Web 应用协同工作,这些应用可以单独更新
- javascript代码可以单独工作,但在同一页面上使用时会失败
- Javascript代码包含在html中时可以工作,但单独加载/注入时则不能工作
- javascript命令可以单独工作,但不能按顺序作为bookmarklet
- java脚本中的多个函数单独工作,但不能在一个脚本中工作
- 脚本在“点击”下工作事件,但不是单独的(Backbone.js)
- 为什么一些jQuery代码不能在单独的