注入我有嵌入在加載的HTML頁面中時,下面的代碼工作順利工作時:JavaScript代碼中的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內的代碼一切正常,它會在屏幕被觸摸時執行,當它被單獨加載時,屏幕被觸摸時什麼都不會發生。 任何想法可能是什麼問題?
====== UPDATE 我試圖運行在生命週期的不同階段以下,其中甚至載荷已經發出尋呼請求之前,但「大教堂加載內容」永遠不會出現:
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'事件可能已經被觸發,所以你的處理程序永遠不會被調用。 – jfriend00 2012-02-18 22:59:31
我正在使用名爲stringByEvaluatingJavaScriptFromString的iOS函數來執行腳本。我試過在頁面加載前後執行它。 – Gruntcakes 2012-02-18 23:42:23