我通过DOMElement对象以编程方式更新WebKit webview上的DOM - 对于复杂的UI,我添加的任何元素通常都有一个javascript组件。这需要在更新完成时得到通知 - 是否有任何此类事件?我知道常规div不会触发onload或onready事件,对吗?我可能完全错误的另一个假设是,DOMElement更新不是同步的,所以我不能做这样的事情,并确信它会在DOM中实际遇到标签:
DOMElement *displayNameLabel = [document createElement:@"div"];
[displayNameLabel setAttribute:@"class" value:@"user-display-name"];
[displayNameLabel setTextContent:currentAvatar.avatarData.displayName];
[[document getElementById:@"user-card-content"] appendChild:displayNameLabel];
id win = [webView windowScriptObject];
[win evaluateWebScript:@"javascriptInstantiateLabel()"];
这是真的吗?
我已经在html的主体中使用了jquery,所以我不介意通过“live”订阅特定类的事件集。我想我可能会做类似的事情:
$(".some-class-to-be-added-later").live( "ready", function(){
// Instantiate some fantastic javascript here for .some-class
});
到目前为止,却没有经历任何快乐。有没有任何方法(objective-c,因为我没有以编程方式触发javascript post load或javascript),当元素在DOM中时会被通知?
谢谢, 约什
编辑:根据 Anurag 的回答,这是我提出的代码(有效):
function onButtonPanelChange() {
console.log( "Button panel subtree modified", 7 );
$(".panel-button").each( function(){
console.log( "Button found " + $(this).attr( "class" ), 7 );
if( !$(this).hasClass( "processed" ) ){
$("#bottom-button-panel").unbind( "DOMSubtreeModified" );
if( $(this).hasClass( "chat" ) ){
console.log( "Found chat button, instantiating", 7);
var chat_button = new Button( $(this), chat_button_def );
$(this).addClass( "processed" );
}
else if( $(this).hasClass( "get" ) ){
var chat_button = new Button( $(this), get_button_def );
$(this).addClass( "processed" );
}
$("#bottom-button-panel").bind( "DOMSubtreeModified", onButtonPanelChange );
console.log( "Done with button change, rebinding", 7 );
}
});
}
$(document).ready( function(){
$("#bottom-button-panel").bind( "DOMSubtreeModified", onButtonPanelChange);
});
请注意,hella需要取消绑定事件,因为每次后续更改都会触发另一个事件,另一个事件和另一个事件。
答案 0 :(得分:1)
查看一小时前提出的类似问题 - Is there a JavaScript/jQuery DOM change listener?
要收听元素的更改,请使用以下内容:
$("#someDiv").bind("DOMSubtreeModified", function() {
alert("tree changed");
});
我没有通过Objective-C编写DOM脚本,所以不知道是否有方法使用Objective-C包装器订阅DOM事件。
DOMSubtreeModified
已修改的事件适用于iPhone。刚刚使用this example进行了测试。