gpt4 book ai didi

Javascript 代码在包含在 html 中时有效,但在单独加载/注入(inject)时无效

转载 作者:行者123 更新时间:2023-12-02 19:50:42 24 4
gpt4 key购买 nike

我有以下代码,当嵌入到加载的 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);

最佳答案

根据您对 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) {
...
}

关于Javascript 代码在包含在 html 中时有效,但在单独加载/注入(inject)时无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9344446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com