js operate frame

本文探讨了在页面框架中使用iframe时遇到的问题:如何确保目标窗体完全加载后再调用其内部JavaScript函数。作者尝试了多种方法,最终采用setTimeout实现延迟调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的页面框架如下
<frameset rows="," cols="190,*" framespacing="0" frameborder="no" border="0" class="k">
<frame src="left_01.html" name="left" frameborder="no" noresize="noresize" scrolling="no">
<frame src="zhgl.html" name="main" class="mainframe" frameborder="no" scrolling="yes">

</frameset>

我想通过left_01.html内的
<a href="aaaaaa.html" target="main" omenu="clickme" onclick="setTimeout('sublingadd()',1000);">clickme</a>
<script language="JavaScript" type="text/javascript">
<!--
function sublingadd(){
parent.document.getElementsByName('main')[0].contentWindow.popupwin();
}
//-->
</script>

其中popupwin()是zhgl.html的一个js function
如果不用setTimeout,那么zhgl.html还没有加载完的时候会报错
出此下策。
我之前想通过给zhgl.html添加body.onload的方式不成功,
最后用调用zhgl.html内的函数来完成弹出窗体。


<script language="JavaScript" type="text/javascript">

<!--
function sublingadd(){
//f1();
//parent.document.getElementsByName("main")[0].contentWindow.document.body.onload=parent.document.getElementsByName("main")[0].contentWindow.f1;
parent.document.getElementsByName("main")[0].contentWindow.f1();
/*var self = parent.document.getElementsByName("main")[0].contentWindow.document.body,self_f=parent.document.getElementsByName("main")[0].contentWindow.f1;
if (document.all){
self.attachEvent('onload',self_f)//IE中
}
else{
self.addEventListener('load',self_f,false);//firefox
}*/
//function(){ parent.document.getElementsByName("main")[0].contentWindow.f1(); }
// this.bodyonload();
//Pa_Modal.Open('viptjyy1.html',460,250,null,0,0);
//parent.parent.document.body.onload=Pa_Modal.Open('viptjyy1.html',460,250,null,0,0);
//return false;
//console.log(parent.document.getElementsByName("main")[0].contentWindow.document.body);
}
/*sublingadd.prototype.bodyonload= function(){
parent.document.getElementsByName("main")[0].contentWindow.f1();
}*/
//-->
</script>
--------- beginning of system 2025-07-14 19:01:46.868 1569-2215 ActivityManager system_server I Force stopping org.cocos2d.demo appid=10051 user=0: from pid 5432 --------- beginning of main 2025-07-14 19:01:46.869 2159-2159 ContextImpl com.android.coreservice W Calling a method in the system process without a qualified user: android.app.ContextImpl.startService:1531 android.content.ContextWrapper.startService:664 android.content.ContextWrapper.startService:664 com.android.coreservice.CoreBroadcastReceiver.onReceive:54 android.app.ActivityThread.handleReceiver:3424 2025-07-14 19:01:43.961 1569-1576 chatty system_server I uid=1000(system) FinalizerDaemon expire 46 lines 2025-07-14 19:01:43.961 1569-1576 System system_server W A resource failed to call close. 2025-07-14 19:01:46.870 1904-1904 CarrierSvcBindHelper com.android.phone D No carrier app for: 0 2025-07-14 19:01:46.935 1569-3446 ActivityManager system_server I Force stopping org.cocos2d.demo appid=10051 user=0: from pid 5445 2025-07-14 19:01:46.936 1904-1904 CarrierSvcBindHelper com.android.phone D No carrier app for: 0 2025-07-14 19:01:46.937 2159-2159 ContextImpl com.android.coreservice W Calling a method in the system process without a qualified user: android.app.ContextImpl.startService:1531 android.content.ContextWrapper.startService:664 android.content.ContextWrapper.startService:664 com.android.coreservice.CoreBroadcastReceiver.onReceive:54 android.app.ActivityThread.handleReceiver:3424 2025-07-14 19:01:46.959 1569-3446 ActivityManager system_server I START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=org.cocos2d.demo/org.cocos2dx.javascript.AppActivity} from uid 2000 2025-07-14 19:01:46.974 2159-2159 ContextImpl com.android.coreservice W Calling a method in the system process without a qualified user: android.app.ContextImpl.startService:1531 android.content.ContextWrapper.startService:664 android.content.ContextWrapper.startService:664 com.android.coreservice.CoreBroadcastReceiver.onReceive:45 android.app.ActivityThread.handleReceiver:3424 2025-07-14 19:01:46.979 1423-1423 allocator@2.0-s and...raphics.allocator@2.0-service I type=1400 audit(0.0:1117): avc: denied { ioctl } for path="/dev/fastpipe" dev="tmpfs" ino=7232 ioctlcmd=6867 scontext=u:r:hal_graphics_allocator_default:s0 tcontext=u:object_r:device:s0 tclass=chr_file permissive=1 2025-07-14 19:01:46.998 5451-5451 nativebridge pid-5451 D PreInitializeNativeBridge name=zygote64 instruction_set=arm64 2025-07-14 19:01:46.999 1569-1586 ActivityManager system_server I Start proc 5451:org.cocos2d.demo/u0a51 for activity org.cocos2d.demo/org.cocos2dx.javascript.AppActivity 2025-07-14 19:01:47.014 5451-5451 nativebridge pid-5451 W Failed to bind-mount /data/local/cfg-nnayn/ as /proc/cpuinfo: Not a directory 2025-07-14 19:01:47.017 5451-5451 Zygote pid-5451 I seccomp disabled by setenforce 0 2025-07-14 19:01:47.018 5451-5451 rg.cocos2d.dem pid-5451 I Late-enabling -Xcheck:jni 2025-07-14 19:01:47.036 5451-5451 libnb pid-5451 V enter native_bridge2_initialize /data/user/0/org.cocos2d.demo/code_cache arm64 2025-07-14 19:01:47.036 5451-5451 houdini pid-5451 D [5451] Initialize library(version: 9.0.7a_z.38597 RELEASE)... successfully. ---------------------------- PROCESS STARTED (5451) for package org.cocos2d.demo ---------------------------- 2025-07-14 19:01:47.037 5451-5451 libnb pid-5451 V enter native_bridge2_isCompatibleWith 2 2025-07-14 19:01:47.139 2159-2159 ContextImpl com.android.coreservice W Calling a method in the system process without a qualified user: android.app.ContextImpl.startService:1531 android.content.ContextWrapper.startService:664 android.content.ContextWrapper.startService:664 com.android.coreservice.CoreBroadcastReceiver.onReceive:54 android.app.ActivityThread.handleReceiver:3424 2025-07-14 19:01:47.037 5451-5451 chatty org.cocos2d.demo I uid=10051(org.cocos2d.demo) identical 63 lines 2025-07-14 19:01:47.037 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_isCompatibleWith 2 2025-07-14 19:01:47.157 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_isCompatibleWith 3 2025-07-14 19:01:47.157 5451-5451 libnb org.cocos2d.demo V enter native_bridge3_isPathSupported /data/app/org.cocos2d.demo-DSE6AeZBhpmsfM8p5sz99g==/lib/arm64:/data/app/org.cocos2d.demo-DSE6AeZBhpmsfM8p5sz99g==/base.apk!/lib/arm64-v8a 2025-07-14 19:01:47.157 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_isCompatibleWith 3 2025-07-14 19:01:47.157 5451-5451 libnb org.cocos2d.demo V enter native_bridge3_initAnonymousNamespace libandroid.so:libaaudio.so:libc.so:libcamera2ndk.so:libdl.so:libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libicui18n.so:libicuuc.so:libjnigraphics.so:liblog.so:libmediandk.so:libm.so:libnativewindow.so:libneuralnetworks.so:libOpenMAXAL.so:libOpenSLES.so:libRS.so:libstdc++.so:libsync.so:libvulkan.so:libwebviewchromium_plat_support.so:libz.so, /data/app/org.cocos2d.demo-DSE6AeZBhpmsfM8p5sz99g==/lib/arm64:/data/app/org.cocos2d.demo-DSE6AeZBhpmsfM8p5sz99g==/base.apk!/lib/arm64-v8a 2025-07-14 19:01:47.157 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_isCompatibleWith 3 2025-07-14 19:01:47.157 5451-5451 libnb org.cocos2d.demo V enter native_bridge3_isPathSupported /data/app/org.cocos2d.demo-DSE6AeZBhpmsfM8p5sz99g==/lib/arm64:/data/app/org.cocos2d.demo-DSE6AeZBhpmsfM8p5sz99g==/base.apk!/lib/arm64-v8a 2025-07-14 19:01:47.157 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_isCompatibleWith 3 2025-07-14 19:01:47.157 5451-5451 libnb org.cocos2d.demo V enter native_bridge3_createNamespace classloader-namespace, (null), /data/app/org.cocos2d.demo-DSE6AeZBhpmsfM8p5sz99g==/lib/arm64:/data/app/org.cocos2d.demo-DSE6AeZBhpmsfM8p5sz99g==/base.apk!/lib/arm64-v8a, /data:/mnt/expand:/data/user/0/org.cocos2d.demo 2025-07-14 19:01:47.157 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_isCompatibleWith 4 2025-07-14 19:01:47.157 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_isCompatibleWith 3 2025-07-14 19:01:47.157 5451-5451 libnb org.cocos2d.demo V enter native_bridge3_linkNamespaces libandroid.so:libaaudio.so:libc.so:libcamera2ndk.so:libdl.so:libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libicui18n.so:libicuuc.so:libjnigraphics.so:liblog.so:libmediandk.so:libm.so:libnativewindow.so:libneuralnetworks.so:libOpenMAXAL.so:libOpenSLES.so:libRS.so:libstdc++.so:libsync.so:libvulkan.so:libwebviewchromium_plat_support.so:libz.so 2025-07-14 19:01:47.164 1569-1576 System system_server W A resource failed to call close. 2025-07-14 19:01:47.164 1569-1576 chatty system_server I uid=1000(system) FinalizerDaemon identical 19 lines 2025-07-14 19:01:47.164 1569-1576 System system_server W A resource failed to call close. 2025-07-14 19:01:47.198 1721-2100 ziparchive com.android.systemui W Unable to open '/data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk': No such file or directory 2025-07-14 19:01:47.198 1721-2100 ndroid.systemu com.android.systemui E Failed to open APK '/data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk' I/O error 2025-07-14 19:01:47.198 1721-2100 ResourcesManager com.android.systemui E failed to add asset path /data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk 2025-07-14 19:01:47.198 1721-2100 PackageManager com.android.systemui W Failure retrieving resources for org.cocos2d.demo 2025-07-14 19:01:47.198 1721-2100 ziparchive com.android.systemui W Unable to open '/data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk': No such file or directory 2025-07-14 19:01:47.198 1721-2100 ndroid.systemu com.android.systemui E Failed to open APK '/data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk' I/O error 2025-07-14 19:01:47.198 1721-2100 ResourcesManager com.android.systemui E failed to add asset path /data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk 2025-07-14 19:01:47.198 1721-2100 PackageManager com.android.systemui W Failure retrieving resources for org.cocos2d.demo 2025-07-14 19:01:47.198 1721-2100 ziparchive com.android.systemui W Unable to open '/data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk': No such file or directory 2025-07-14 19:01:47.198 1721-2100 ndroid.systemu com.android.systemui E Failed to open APK '/data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk' I/O error 2025-07-14 19:01:47.198 1721-2100 ResourcesManager com.android.systemui E failed to add asset path /data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk 2025-07-14 19:01:47.198 1721-2100 PackageManager com.android.systemui W Failure retrieving resources for org.cocos2d.demo 2025-07-14 19:01:47.198 1721-2100 ziparchive com.android.systemui W Unable to open '/data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk': No such file or directory 2025-07-14 19:01:47.198 1721-2100 ndroid.systemu com.android.systemui E Failed to open APK '/data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk' I/O error 2025-07-14 19:01:47.198 1721-2100 ResourcesManager com.android.systemui E failed to add asset path /data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk 2025-07-14 19:01:47.198 1721-2100 PackageManager com.android.systemui W Failure retrieving resources for org.cocos2d.demo 2025-07-14 19:01:47.198 1721-2100 ziparchive com.android.systemui W Unable to open '/data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk': No such file or directory 2025-07-14 19:01:47.198 1721-2100 ndroid.systemu com.android.systemui E Failed to open APK '/data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk' I/O error 2025-07-14 19:01:47.198 1721-2100 ResourcesManager com.android.systemui E failed to add asset path /data/app/org.cocos2d.demo-qLW_1oeK0d6GzjNEfloC_Q==/base.apk 2025-07-14 19:01:47.198 1721-2100 PackageManager com.android.systemui W Failure retrieving resources for org.cocos2d.demo 2025-07-14 19:01:47.224 5451-5451 Cocos2dxActivity org.cocos2d.demo D Cocos2dxActivity onCreate: org.cocos2dx.javascript.AppActivity@f1c691f, savedInstanceState: null 2025-07-14 19:01:47.260 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_isCompatibleWith 3 2025-07-14 19:01:47.260 5451-5451 libnb org.cocos2d.demo V enter native_bridge3_loadLibraryExt /data/app/org.cocos2d.demo-DSE6AeZBhpmsfM8p5sz99g==/lib/arm64/libcocos2djs.so, 2, 0x3 2025-07-14 19:01:47.512 5451-5451 libnb org.cocos2d.demo V native_bridge3_loadLibraryExt: 0x763877d4eac0 2025-07-14 19:01:47.513 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_getTrampoline JNI_OnLoad, trampoline_addr 0x76388e6af000 2025-07-14 19:01:47.513 5451-5451 JniHelper org.cocos2d.demo D JniHelper::setJavaVM(0x76388ede6928), pthread_self() = 129987584391496 2025-07-14 19:01:47.513 5451-5451 main org.cocos2d.demo D cocos_jni_env_init 2025-07-14 19:01:47.513 5451-5451 Cocos2dxHelper org.cocos2d.demo D isSupportLowLatency:true 2025-07-14 19:01:47.515 5451-5451 Cocos2dxHelper org.cocos2d.demo D sampleRate: 48000, framesPerBuffer: 1024 2025-07-14 19:01:47.515 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_getTrampoline Java_org_cocos2dx_lib_Cocos2dxHelper_nativeSetAudioDeviceInfo, trampoline_addr 0x76388e6af020 2025-07-14 19:01:47.515 5451-5451 JniImp org.cocos2d.demo D nativeSetAudioDeviceInfo: sampleRate: 48000, bufferSizeInFrames: 1024 2025-07-14 19:01:47.516 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_getTrampoline Java_org_cocos2dx_lib_Cocos2dxHelper_nativeSetApkPath, trampoline_addr 0x76388e6af040 2025-07-14 19:01:47.517 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_getTrampoline Java_org_cocos2dx_lib_Cocos2dxHelper_nativeSetContext, trampoline_addr 0x76388e6af060 2025-07-14 19:01:47.520 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_getTrampoline Java_org_cocos2dx_lib_Cocos2dxActivity_getGLContextAttrs, trampoline_addr 0x76388e6af080 2025-07-14 19:01:47.521 5451-5451 OpenGLRenderer org.cocos2d.demo D Skia GL Pipeline 2025-07-14 19:01:47.522 5451-5451 SDKWrapper org.cocos2d.demo W project.json 中不存在 serviceClassPath 字段 2025-07-14 19:01:47.523 5451-5451 Cocos2dxActivity org.cocos2d.demo D model=ASUS_AI2401_A 2025-07-14 19:01:47.523 5451-5451 Cocos2dxActivity org.cocos2d.demo D product=ASUS_AI2401_A 2025-07-14 19:01:47.523 5451-5451 Cocos2dxActivity org.cocos2d.demo D isEmulator=false 2025-07-14 19:01:47.546 5451-5451 Cocos2dxActivity org.cocos2d.demo D onResume() 2025-07-14 19:01:47.599 5451-5451 libnb org.cocos2d.demo V enter native_bridge2_getTrampoline Java_org_cocos2dx_lib_Cocos2dxGLSurfaceView_nativeOnSizeChanged, trampoline_addr 0x76388e6af0a0 2025-07-14 19:01:47.599 5451-5480 <no-tag> org.cocos2d.demo I fastpipe: Connect success 2025-07-14 19:01:47.601 5451-5480 <no-tag> org.cocos2d.demo I fastpipe: Connect success 2025-07-14 19:01:47.601 5451-5480 HostConnection org.cocos2d.demo D HostRPC::connect sucess: app=org.cocos2d.demo, pid=5451, tid=5480, this=0x7638888262c0 2025-07-14 19:01:47.602 5451-5480 HostConnection org.cocos2d.demo D queryAndSetGLESMaxVersion select gles-version: 3.1 hostGLVersion:46 process:org.cocos2d.demo 2025-07-14 19:01:47.604 5451-5480 ConfigStore org.cocos2d.demo I android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0 2025-07-14 19:01:47.604 5451-5480 ConfigStore org.cocos2d.demo I android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0 2025-07-14 19:01:47.604 5451-5480 OpenGLRenderer org.cocos2d.demo I Initialized EGL, version 1.4 2025-07-14 19:01:47.604 5451-5480 OpenGLRenderer org.cocos2d.demo D Swap behavior 1 2025-07-14 19:01:47.605 5451-5478 <no-tag> org.cocos2d.demo I fastpipe: Connect success 2025-07-14 19:01:47.605 5451-5478 HostConnection org.cocos2d.demo D HostRPC::connect sucess: app=org.cocos2d.demo, pid=5451, tid=5478, this=0x76387a5f7b00 2025-07-14 19:01:47.610 5451-5480 EGL_emulation org.cocos2d.demo D eglCreateContext: 0x76389273ba80: maj 3 min 1 rcv 4 2025-07-14 19:01:47.610 5451-5478 HostConnection org.cocos2d.demo D queryAndSetGLESMaxVersion select gles-version: 3.1 hostGLVersion:46 process:org.cocos2d.demo 2025-07-14 19:01:47.617 5451-5478 EGL_emulation org.cocos2d.demo D eglCreateContext: 0x76389273bf00: maj 3 min 1 rcv 4 2025-07-14 19:01:47.638 5451-5478 vndksupport org.cocos2d.demo D Loading /vendor/lib64/hw/android.hardware.graphics.mapper@2.0-impl.so from current namespace instead of sphal namespace. 2025-07-14 19:01:47.639 5451-5480 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x000082da 2025-07-14 19:01:47.639 5451-5480 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x000082e5 2025-07-14 19:01:47.640 5451-5478 vndksupport org.cocos2d.demo D Loading /vendor/lib64/hw/gralloc.default.so from current namespace instead of sphal namespace. 2025-07-14 19:01:47.642 5451-5480 HostConnection org.cocos2d.demo D ExtendedRCEncoderContext GL_VERSION return OpenGL ES 3.1 v1 2025-07-14 19:01:47.644 5451-5480 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x00008c29 2025-07-14 19:01:47.645 5451-5480 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x000087fe 2025-07-14 19:01:47.666 5451-5478 libnb org.cocos2d.demo V enter native_bridge2_getTrampoline Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit, trampoline_addr 0x76388e6af0c0 2025-07-14 19:01:47.666 5451-5478 main org.cocos2d.demo D cocos_android_app_init 2025-07-14 19:01:47.667 5451-5478 HostConnection org.cocos2d.demo D ExtendedRCEncoderContext GL_VERSION return OpenGL ES 3.1 v1 2025-07-14 19:01:47.671 5451-5480 EGL_emulation org.cocos2d.demo E tid 5480: eglSurfaceAttrib(1493): error 0x3009 (EGL_BAD_MATCH) 2025-07-14 19:01:47.671 5451-5480 OpenGLRenderer org.cocos2d.demo W Failed to set EGL_SWAP_BEHAVIOR on surface 0x76387a0f6180, error=EGL_BAD_MATCH 2025-07-14 19:01:47.672 5451-5478 JniImp org.cocos2d.demo D nativeInit: 1440, 2560, 2025-07-14 19:01:47.686 5451-5478 jswrapper org.cocos2d.demo D Initializing V8, version: 8.0.426.16 2025-07-14 19:01:47.709 5451-5451 Cocos2dxActivity org.cocos2d.demo D onWindowFocusChanged() hasFocus=true 2025-07-14 19:01:47.548 2159-2159 ContextImpl com.android.coreservice W Calling a method in the system process without a qualified user: android.app.ContextImpl.startService:1531 android.content.ContextWrapper.startService:664 android.content.ContextWrapper.startService:664 com.android.coreservice.CoreBroadcastReceiver.onReceive:54 android.app.ActivityThread.handleReceiver:3424 2025-07-14 19:01:47.712 2159-2159 ContextImpl com.android.coreservice W Calling a method in the system process without a qualified user: android.app.ContextImpl.startService:1531 android.content.ContextWrapper.startService:664 android.content.ContextWrapper.startService:664 com.android.coreservice.CoreBroadcastReceiver.onReceive:70 android.app.ActivityThread.handleReceiver:3424 2025-07-14 19:01:47.747 1569-1576 System system_server W A resource failed to call close. 2025-07-14 19:01:47.747 1569-1576 chatty system_server I uid=1000(system) FinalizerDaemon identical 25 lines 2025-07-14 19:01:47.747 1569-1576 System system_server W A resource failed to call close. 2025-07-14 19:01:47.775 5451-5478 jswrapper org.cocos2d.demo D libuv version: 1.13.1 2025-07-14 19:01:47.780 5451-5488 jswrapper org.cocos2d.demo D Debugger listening..., visit [ devtools://devtools/bundled/js_app.html?v8only=true&ws=0.0.0.0:6086/00010002-0003-4004-8005-000600070008 ] in chrome browser to debug! 2025-07-14 19:01:47.780 5451-5488 jswrapper org.cocos2d.demo D For help see https://nodejs.org/en/docs/inspector 2025-07-14 19:01:48.368 5451-5478 jswrapper org.cocos2d.demo D JS: Enable batch GL commands optimization! 2025-07-14 19:01:49.262 5451-5478 NetworkSecurityConfig org.cocos2d.demo D No Network Security Config specified, using platform default 2025-07-14 19:01:49.264 5451-5478 rg.cocos2d.dem org.cocos2d.demo W Accessing hidden method Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; (light greylist, reflection) 2025-07-14 19:01:49.264 5451-5478 rg.cocos2d.dem org.cocos2d.demo W Accessing hidden method Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V (light greylist, reflection) 2025-07-14 19:01:49.264 5451-5478 rg.cocos2d.dem org.cocos2d.demo W Accessing hidden method Ldalvik/system/CloseGuard;->warnIfOpen()V (light greylist, reflection) 2025-07-14 19:01:49.269 5451-5478 cocos2d-x org.cocos2d.demo D find in flash memory dirPath(/data/user/0/org.cocos2d.demo/files/temp) 2025-07-14 19:01:49.322 5451-5478 jswrapper org.cocos2d.demo E ScriptEngine::onGetStringFromFile stream not found, possible missing file. 2025-07-14 19:01:49.322 5451-5478 jswrapper org.cocos2d.demo E ScriptEngine::runScript script stream, buffer is empty! 2025-07-14 19:01:49.322 5451-5478 jswrapper org.cocos2d.demo E [ERROR] Failed to invoke require, location: C:/ProgramData/cocos/editors/Creator/2.4.13/resources/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_global.cpp:299 2025-07-14 19:01:49.362 5451-5478 jswrapper org.cocos2d.demo E ScriptEngine::evalString catch exception: 2025-07-14 19:01:49.382 5451-5478 jswrapper org.cocos2d.demo E ERROR: Uncaught ReferenceError: self is not defined, location: src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:0:0 STACK: [0]anonymous@src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:2 [1]anonymous@src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:3 [2]anonymous@jsb-adapter/jsb-engine.js:2975 [3]download@jsb-adapter/jsb-engine.js:2984 [4]downloadScript@jsb-adapter/jsb-engine.js:2971 [5]a@src/cocos2d-jsb.28d62.js:16668 [6]anonymous@src/cocos2d-jsb.28d62.js:16678 [7]retry@src/cocos2d-jsb.28d62.js:18111 [8]download@src/cocos2d-jsb.28d62.js:16663 [9]load@src/cocos2d-jsb.28d62.js:17318 [10]94.e.exports@src/cocos2d-jsb.28d62.js:17134 [11]_flow@src/cocos2d-jsb.28d62.js:17579 [12]async@src/cocos2d-jsb.28d62.js:17574 [13]anonymous@src/cocos2d-jsb.28d62.js:17261 [14]forEach@src/cocos2d-jsb.28d62.js:18189 [15]94.e.exports@src/cocos2d-jsb.28d62.js:17244 [16]_flow@src/cocos2d-jsb.28d62.js:17579 [17]anonymous@src/cocos2d-jsb.28d62.js:17586 [18]98.e.exports@src/cocos2d-jsb.2 2025-07-14 19:01:49.382 5451-5478 debug info org.cocos2d.demo D Uncaught Exception: - location : (see stack) - msg : Uncaught ReferenceError: self is not defined - detail : [0]anonymous@src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:2 [1]anonymous@src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:3 [2]anonymous@jsb-adapter/jsb-engine.js:2975 [3]download@jsb-adapter/jsb-engine.js:2984 [4]downloadScript@jsb-adapter/jsb-engine.js:2971 [5]a@src/cocos2d-jsb.28d62.js:16668 [6]anonymous@src/cocos2d-jsb.28d62.js:16678 [7]retry@src/cocos2d-jsb.28d62.js:18111 [8]download@src/cocos2d-jsb.28d62.js:16663 [9]load@src/cocos2d-jsb.28d62.js:17318 [10]94.e.exports@src/cocos2d-jsb.28d62.js:17134 [11]_flow@src/cocos2d-jsb.28d62.js:17579 [12]async@src/cocos2d-jsb.28d62.js:17574 [13]anonymous@src/cocos2d-jsb.28d62.js:17261 [14]forEach@src/cocos2d-jsb.28d62.js:18189 [15]94.e.exports@src/cocos2d-jsb.28d62.js:17244 [16]_flow@src/cocos2d-jsb.28d62.js:17579 [17]anonymous@src/cocos2d-jsb.28d62.js:17586 [18]98.e.exports@src/cocos2d-jsb.28d62.js:17642 [19] 2025-07-14 19:01:49.383 5451-5478 jswrapper org.cocos2d.demo D JS: [ERROR]: (see stack) Uncaught ReferenceError: self is not defined [0]anonymous@src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:2 [1]anonymous@src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:3 [2]anonymous@jsb-adapter/jsb-engine.js:2975 [3]download@jsb-adapter/jsb-engine.js:2984 [4]downloadScript@jsb-adapter/jsb-engine.js:2971 [5]a@src/cocos2d-jsb.28d62.js:16668 [6]anonymous@src/cocos2d-jsb.28d62.js:16678 [7]retry@src/cocos2d-jsb.28d62.js:18111 [8]download@src/cocos2d-jsb.28d62.js:16663 [9]load@src/cocos2d-jsb.28d62.js:17318 [10]94.e.exports@src/cocos2d-jsb.28d62.js:17134 [11]_flow@src/cocos2d-jsb.28d62.js:17579 [12]async@src/cocos2d-jsb.28d62.js:17574 [13]anonymous@src/cocos2d-jsb.28d62.js:17261 [14]forEach@src/cocos2d-jsb.28d62.js:18189 [15]94.e.exports@src/cocos2d-jsb.28d62.js:17244 [16]_flow@src/cocos2d-jsb.28d62.js:17579 [17]anonymous@src/cocos2d-jsb.28d62.js:17586 [18]98.e.exports@src/cocos2d-jsb.28d62.js:17642 [19]_flow@src/cocos2d-jsb.28d62.js:17579 2025-07-14 19:01:49.384 5451-5478 jswrapper org.cocos2d.demo E ScriptEngine::evalString script src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js, failed! 2025-07-14 19:01:49.384 5451-5478 jswrapper org.cocos2d.demo E [ERROR] Failed to invoke require, location: C:/ProgramData/cocos/editors/Creator/2.4.13/resources/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_global.cpp:299 2025-07-14 19:01:49.428 5451-5478 libnb org.cocos2d.demo V enter native_bridge2_getTrampoline Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeOnSurfaceChanged, trampoline_addr 0x76388e6af0e0 2025-07-14 19:01:49.429 5451-5478 libnb org.cocos2d.demo V enter native_bridge2_getTrampoline Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender, trampoline_addr 0x76388e6af100 2025-07-14 19:01:49.652 5451-5478 libnb org.cocos2d.demo V enter native_bridge2_getTrampoline Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeOnResume, trampoline_addr 0x76388e6af120 2025-07-14 19:01:49.667 5451-5478 renderer org.cocos2d.demo D (626): Device caps: maxVextexTextures: 32, maxFragUniforms: 1024, maxTextureUints: 32, maxVertexAttributes: 16, maxDrawBuffers: 1, maxColorAttatchments: 1 2025-07-14 19:01:49.856 1569-1583 system_server system_server W Failed to determine oat file name for dex location /data/app/org.cocos2d.demo-DSE6AeZBhpmsfM8p5sz99g==/base.apk: Dalvik cache directory does not exist 2025-07-14 19:01:49.856 1569-1583 ActivityManager system_server I Displayed org.cocos2d.demo/org.cocos2dx.javascript.AppActivity: +2s896ms 2025-07-14 19:01:49.865 1436-1436 surfaceflinger surfaceflinger I type=1400 audit(0.0:1139): avc: denied { read write } for path="/dev/fastpipe" dev="tmpfs" ino=7232 scontext=u:r:hal_graphics_composer_default:s0 tcontext=u:object_r:device:s0 tclass=chr_file permissive=1 2025-07-14 19:01:49.904 1436-1524 SurfaceFlinger surfaceflinger W Attempting to set client state on removed layer: Splash Screen org.cocos2d.demo#0 2025-07-14 19:01:49.904 1436-1524 SurfaceFlinger surfaceflinger W Attempting to destroy on removed layer: Splash Screen org.cocos2d.demo#0 2025-07-14 19:01:49.937 5451-5478 jswrapper org.cocos2d.demo D JS: Cocos Creator v2.4.13 2025-07-14 19:01:50.037 5451-5478 jswrapper org.cocos2d.demo D JS: 平板 宽度=750 高度=1333.3333333333335 2025-07-14 19:01:50.041 5451-5478 jswrapper org.cocos2d.demo D JS: 平板 宽度 适配后 宽度=750.375 高度=1334 2025-07-14 19:01:50.249 5451-5478 jswrapper org.cocos2d.demo D JS: 【YPSDK】 设置 登录回调 成功 2025-07-14 19:01:50.250 5451-5478 jswrapper org.cocos2d.demo D JS: [game-logger] UIManager open view: UI_Entry 2025-07-14 19:01:50.428 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:01:51.176 5451-5478 chatty org.cocos2d.demo I uid=10051(org.cocos2d.demo) GLThread 168 identical 11 lines 2025-07-14 19:01:51.246 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:01:51.245 1433-1433 ldinit ldinit I type=1400 audit(0.0:1140): avc: denied { read } for name="partitions" dev="proc" ino=4026532050 scontext=u:r:ldinit:s0 tcontext=u:object_r:proc:s0 tclass=file permissive=1 2025-07-14 19:01:51.245 1433-1433 ldinit ldinit I type=1400 audit(0.0:1140): avc: denied { open } for path="/proc/partitions" dev="proc" ino=4026532050 scontext=u:r:ldinit:s0 tcontext=u:object_r:proc:s0 tclass=file permissive=1 2025-07-14 19:01:51.330 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:01:59.903 5451-5478 chatty org.cocos2d.demo I uid=10051(org.cocos2d.demo) GLThread 168 identical 95 lines 2025-07-14 19:01:59.976 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:00.001 1569-1583 memtrack system_server E Couldn't load memtrack module 2025-07-14 19:02:00.001 1569-1583 android.os.Debug system_server W failed to get memory consumption info: -1 2025-07-14 19:02:00.048 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:00.149 5451-5478 chatty org.cocos2d.demo I uid=10051(org.cocos2d.demo) GLThread 168 identical 1 line 2025-07-14 19:02:00.216 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:00.256 5451-5478 jswrapper org.cocos2d.demo D JS: [ERROR]: 10s后,仍然未登录成功,直接进入游戏 2025-07-14 19:02:00.266 5451-5478 jswrapper org.cocos2d.demo D JS: Load game config success: [object Object] 2025-07-14 19:02:00.267 5451-5478 jswrapper org.cocos2d.demo D JS: 游戏本地配置加载成功 6 2025-07-14 19:02:00.281 5451-5478 jswrapper org.cocos2d.demo D JS: Load remote config success: [object Object] 2025-07-14 19:02:00.282 5451-5478 jswrapper org.cocos2d.demo D JS: 远程配置加载成功 13 2025-07-14 19:02:00.300 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:00.368 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:00.436 5451-5494 rg.cocos2d.dem org.cocos2d.demo W Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B)V (light greylist, reflection) 2025-07-14 19:02:00.436 5451-5497 rg.cocos2d.dem org.cocos2d.demo W Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B)V (light greylist, reflection) 2025-07-14 19:02:00.436 5451-5493 rg.cocos2d.dem org.cocos2d.demo W Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B)V (light greylist, reflection) 2025-07-14 19:02:00.436 5451-5502 rg.cocos2d.dem org.cocos2d.demo W Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B)V (light greylist, reflection) 2025-07-14 19:02:00.442 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:00.486 5451-5493 rg.cocos2d.dem org.cocos2d.demo W Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getAlpnSelectedProtocol()[B (light greylist, reflection) 2025-07-14 19:02:00.512 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:00.578 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:00.582 5451-5478 libnb org.cocos2d.demo V enter native_bridge2_getTrampoline Java_org_cocos2dx_lib_Cocos2dxDownloader_nativeOnProgress, trampoline_addr 0x76388e6af140 2025-07-14 19:02:00.583 5451-5478 libnb org.cocos2d.demo V enter native_bridge2_getTrampoline Java_org_cocos2dx_lib_Cocos2dxDownloader_nativeOnFinish, trampoline_addr 0x76388e6af160 2025-07-14 19:02:00.675 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:00.824 5451-5478 chatty org.cocos2d.demo I uid=10051(org.cocos2d.demo) GLThread 168 identical 2 lines 2025-07-14 19:02:00.908 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:01.080 5451-5478 jswrapper org.cocos2d.demo D JS: [game-logger] load excel done 20 2025-07-14 19:02:01.083 5451-5478 jswrapper org.cocos2d.demo D JS: 游戏数据表加载成功 799 2025-07-14 19:02:01.085 5451-5478 jswrapper org.cocos2d.demo D JS: [ERROR]: 初始化数据 2025-07-14 19:02:01.092 5451-5478 jswrapper org.cocos2d.demo D JS: [ERROR]: [game-logger] load user data error: [object Object] 2025-07-14 19:02:01.121 5451-5478 jswrapper org.cocos2d.demo D JS: Loaded main bundle [object Object] 2025-07-14 19:02:01.122 5451-5478 jswrapper org.cocos2d.demo D JS: Common分包下载 28 2025-07-14 19:02:01.144 5451-5478 jswrapper org.cocos2d.demo D JS: Loaded main bundle [object Object] 2025-07-14 19:02:01.145 5451-5478 jswrapper org.cocos2d.demo D JS: Home分包下载 22 2025-07-14 19:02:01.162 5451-5478 debug info org.cocos2d.demo D Uncaught Exception: - location : - msg : unhandledRejectedPromise - detail : TypeError: Cannot read property 'userUid' of null stacktrace: [0]406.window.__awaiter@src/cocos2d-jsb.28d62.js:71530 [1]t.onInitWhiteName@assets/main/index.0a7c4.jsc:16936 [2]t._loadGame@assets/main/index.0a7c4.jsc:16756 [3]anonymous@assets/main/index.0a7c4.jsc:16771 2025-07-14 19:02:01.162 5451-5478 jswrapper org.cocos2d.demo D JS: [ERROR]: unhandledRejectedPromise TypeError: Cannot read property 'userUid' of null stacktrace: [0]406.window.__awaiter@src/cocos2d-jsb.28d62.js:71530 [1]t.onInitWhiteName@assets/main/index.0a7c4.jsc:16936 [2]t._loadGame@assets/main/index.0a7c4.jsc:16756 [3]anonymous@assets/main/index.0a7c4.jsc:16771 2025-07-14 19:02:01.188 5451-5478 jswrapper org.cocos2d.demo D JS: [game-logger] auto release all resources: ["UI_Entry"] 2025-07-14 19:02:01.323 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:01.479 5451-5478 jswrapper org.cocos2d.demo D JS: 登陆时间 1752490921479 2025-07-14 19:02:01.482 5451-5478 jswrapper org.cocos2d.demo D JS: [game-logger] 发送埋点 _uma.custom.gameProgress 章节1_0波 2025-07-14 19:02:01.484 5451-5478 jswrapper org.cocos2d.demo D JS: [game-logger] UIManager open view: UI_GameView 2025-07-14 19:02:01.535 5451-5478 AudioPlayerProvider org.cocos2d.demo I deviceSampleRate: 48000, bufferSizeInFrames: 192 2025-07-14 19:02:01.535 5451-5478 AudioPlayerProvider org.cocos2d.demo D Android API level: 28 2025-07-14 19:02:01.535 5451-5478 AudioMixerController org.cocos2d.demo V In the constructor of AudioMixerController! 2025-07-14 19:02:01.535 5451-5478 <no-tag> org.cocos2d.demo D PlayerBase::PlayerBase() 2025-07-14 19:02:01.535 5451-5478 <no-tag> org.cocos2d.demo D TrackPlayerBase::TrackPlayerBase() 2025-07-14 19:02:01.536 5451-5478 libOpenSLES org.cocos2d.demo I Emulating old channel mask behavior (ignoring positional mask 0x3, using default mask 0x3 based on channel count of 2) 2025-07-14 19:02:01.536 1434-5232 AudioFlinger audioserver W createTrack_l(): mismatch between requested flags (00000104) and output flags (00000002) 2025-07-14 19:02:01.536 1434-5232 AudioFlinger audioserver D Client defaulted notificationFrames to 960 for frameCount 2052 2025-07-14 19:02:01.537 5451-5478 AudioTrack org.cocos2d.demo W AUDIO_OUTPUT_FLAG_FAST denied by server; frameCount 0 -> 2052 2025-07-14 19:02:01.538 1707-2033 bt_btif com.android.bluetooth E register_notification_rsp: Avrcp device is not connected, handle: 0x0 2025-07-14 19:02:01.538 1707-2033 chatty com.android.bluetooth I uid=1002(bluetooth) BluetoothAvrcpH identical 4 lines 2025-07-14 19:02:01.538 1707-2033 bt_btif com.android.bluetooth E register_notification_rsp: Avrcp device is not connected, handle: 0x0 2025-07-14 19:02:01.535 1413-1413 writer android.hardware.audio@2.0-service I type=1400 audit(0.0:1143): avc: denied { ioctl } for path="/dev/fastpipe" dev="tmpfs" ino=7232 ioctlcmd=6869 scontext=u:r:hal_audio_default:s0 tcontext=u:object_r:device:s0 tclass=chr_file permissive=1 2025-07-14 19:02:01.538 1413-2919 audio_hw_hal android.hardware.audio@2.0-service D raw_start_output_stream, stream=0xf5f1b000, sampleRate=48000, channel=2, bps=16, bufSize=4096 2025-07-14 19:02:01.539 5451-5478 AudioEngineImpl org.cocos2d.demo V play2d, _audioPlayers.size=0 2025-07-14 19:02:01.539 5451-5478 AudioPlayerProvider org.cocos2d.demo V (@assets/assets/game/native/c1/c1e23d2f-b7dc-44d4-91a4-8774e9abf939.261eb.mp3) file size: 179648 2025-07-14 19:02:01.540 5451-5478 UrlAudioPlayer org.cocos2d.demo V Current UrlAudioPlayer instance count: 1 2025-07-14 19:02:01.540 5451-5478 UrlAudioPlayer org.cocos2d.demo V UrlAudioPlayer::prepare: @assets/assets/game/native/c1/c1e23d2f-b7dc-44d4-91a4-8774e9abf939.261eb.mp3, SL_DATALOCATOR_ANDROIDFD, 98, 6980012, 179648 2025-07-14 19:02:01.540 5451-5478 <no-tag> org.cocos2d.demo D PlayerBase::PlayerBase() 2025-07-14 19:02:01.540 5451-5478 <no-tag> org.cocos2d.demo D TrackPlayerBase::TrackPlayerBase() 2025-07-14 19:02:01.541 1452-2087 NuPlayerDriver mediaserver D NuPlayerDriver(0xf4419800) created, clientPid(5451) 2025-07-14 19:02:01.542 1452-5511 GenericSource mediaserver D FileSource remote 2025-07-14 19:02:01.535 1413-1413 writer android.hardware.audio@2.0-service W type=1300 audit(0.0:1143): arch=40000003 syscall=54 per=8 success=yes exit=0 a0=6 a1=80046869 a2=f5f0f020 a3=f5f0f020 items=0 ppid=1 auid=4294967295 uid=1041 gid=1005 euid=1041 suid=1041 fsuid=1041 egid=1005 sgid=1005 fsgid=1005 tty=(none) ses=4294967295 exe="/system/vendor/bin/hw/android.hardware.audio@2.0-service" subj=u:r:hal_audio_default:s0 key=(null) 2025-07-14 19:02:01.544 1452-5510 NuPlayerDriver mediaserver D notifyListener_l(0xf4419800), (1, 0, 0, -1), loop setting(0, 0) 2025-07-14 19:02:01.535 1362-1362 auditd pid-1362 W type=1327 audit(0.0:1143): proctitle="/vendor/bin/hw/android.hardware.audio@2.0-service" 2025-07-14 19:02:01.545 1452-2087 NuPlayerDriver mediaserver D start(0xf4419800), state is 4, eos is 0 2025-07-14 19:02:01.545 1452-5510 GenericSource mediaserver I start 2025-07-14 19:02:01.547 1452-5514 OMXClient mediaserver I IOmx service obtained 2025-07-14 19:02:01.547 1458-1458 OMXMaster media.codec I makeComponentInstance(OMX.google.mp3.decoder) in omx@1.0-service process 2025-07-14 19:02:01.548 1458-1458 OMXNodeInstance media.codec E setConfig(0xf4f2c120:google.mp3.decoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001) 2025-07-14 19:02:01.548 1452-5514 ACodec mediaserver I codec does not support config priority (err -2147483648) 2025-07-14 19:02:01.548 1458-1458 OMXNodeInstance media.codec E getConfig(0xf4f2c120:google.mp3.decoder, ConfigAndroidVendorExtension(0x6f100004)) ERROR: Undefined(0x80001001) 2025-07-14 19:02:01.549 1452-5514 MediaCodec mediaserver I MediaCodec will operate in async mode 2025-07-14 19:02:01.549 1410-1410 AshmemAllocator android.hidl.allocator@1.0-service W ashmem_create_region(8192) returning hidl_memory(0x76391702c100, 8192) 2025-07-14 19:02:01.550 1410-1410 chatty android.hidl.allocator@1.0-service I uid=1000(system) allocator@1.0-s identical 2 lines 2025-07-14 19:02:01.550 1410-1410 AshmemAllocator android.hidl.allocator@1.0-service W ashmem_create_region(8192) returning hidl_memory(0x76391702c100, 8192) 2025-07-14 19:02:01.551 1410-1410 AshmemAllocator android.hidl.allocator@1.0-service W ashmem_create_region(9216) returning hidl_memory(0x76391702c100, 9216) 2025-07-14 19:02:01.551 1410-1410 chatty android.hidl.allocator@1.0-service I uid=1000(system) allocator@1.0-s identical 2 lines 2025-07-14 19:02:01.552 1410-1410 AshmemAllocator android.hidl.allocator@1.0-service W ashmem_create_region(9216) returning hidl_memory(0x76391702c100, 9216) 2025-07-14 19:02:01.553 1434-5232 AudioFlinger audioserver W createTrack_l(): mismatch between requested flags (00000008) and output flags (00000002) 2025-07-14 19:02:01.553 1434-5232 AudioFlinger audioserver D Client defaulted notificationFrames to 3760 for frameCount 11280 2025-07-14 19:02:01.554 1452-5510 NuPlayerDriver mediaserver D notifyListener_l(0xf4419800), (6, 0, 0, -1), loop setting(0, 1) 2025-07-14 19:02:01.597 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:01.617 5451-5478 jswrapper org.cocos2d.demo D JS: 背景底图时间差 133 2025-07-14 19:02:01.675 1434-1539 AudioFlinger audioserver D mixer(0xf3483640) throttle end: throttle time(10) 2025-07-14 19:02:01.774 1434-1539 AudioFlinger audioserver D mixer(0xf3483640) throttle end: throttle time(10) 2025-07-14 19:02:01.817 1452-5510 NuPlayerDriver mediaserver D notifyListener_l(0xf4419800), (211, 0, 0, 20), loop setting(0, 1) 2025-07-14 19:02:02.016 5451-5478 jswrapper org.cocos2d.demo D JS: [game-logger] 格子保底数量: 1 2025-07-14 19:02:02.018 5451-5478 jswrapper org.cocos2d.demo D JS: [game-logger] 触发格子保底: 0 2025-07-14 19:02:02.020 5451-5478 chatty org.cocos2d.demo I uid=10051(org.cocos2d.demo) GLThread 168 identical 1 line 2025-07-14 19:02:02.021 5451-5478 jswrapper org.cocos2d.demo D JS: [game-logger] 触发格子保底: 0 2025-07-14 19:02:02.075 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:02.075 1452-5510 NuPlayerDriver mediaserver D notifyListener_l(0xf4419800), (211, 0, 0, 20), loop setting(0, 1) 2025-07-14 19:02:02.203 5451-5478 AudioEngineImpl org.cocos2d.demo V play2d, _audioPlayers.size=1 2025-07-14 19:02:02.203 5451-5478 AudioPlayerProvider org.cocos2d.demo V (@assets/assets/game/native/92/921f296e-e66d-4abd-89b5-5278346f0cd6.d3c80.mp3) file size: 3305 2025-07-14 19:02:02.204 5451-5478 AudioPlayerProvider org.cocos2d.demo V FileInfo (0x763874c2e030), Waiting preload (@assets/assets/game/native/92/921f296e-e66d-4abd-89b5-5278346f0cd6.d3c80.mp3) to finish ... 2025-07-14 19:02:02.204 5451-5506 AudioPlayerProvider org.cocos2d.demo V AudioPlayerProvider::preloadEffect: (@assets/assets/game/native/92/921f296e-e66d-4abd-89b5-5278346f0cd6.d3c80.mp3) 2025-07-14 19:02:02.204 5451-5506 AudioDecoderProvider org.cocos2d.demo V url:@assets/assets/game/native/92/921f296e-e66d-4abd-89b5-5278346f0cd6.d3c80.mp3, extension:.mp3 2025-07-14 19:02:02.204 5451-5506 AudioDecoderMp3 org.cocos2d.demo V Create AudioDecoderMp3 2025-07-14 19:02:02.205 5451-5506 mp3reader org.cocos2d.demo V skipped ID3 tag, new starting offset is 172 (0x00000000000000ac) 2025-07-14 19:02:02.205 5451-5506 mp3reader org.cocos2d.demo V subsequent header is fff38064 2025-07-14 19:02:02.205 5451-5506 mp3reader org.cocos2d.demo V found subsequent frame #2 at 380 2025-07-14 19:02:02.205 5451-5506 mp3reader org.cocos2d.demo V subsequent header is fff38264 2025-07-14 19:02:02.205 5451-5506 mp3reader org.cocos2d.demo V found subsequent frame #3 at 588 2025-07-14 19:02:02.205 5451-5506 mp3reader org.cocos2d.demo V subsequent header is fff38264 2025-07-14 19:02:02.205 5451-5506 mp3reader org.cocos2d.demo V found subsequent frame #4 at 797 2025-07-14 19:02:02.245 5451-5506 AudioDecoderMp3 org.cocos2d.demo I Original audio info: numChannels: 2, sampleRate: 22050, bitPerSample: 16, containerSize: 16, channelMask: 3, endianness: 2, numFrames: 8640, duration: 0.391837, total size: 34560 2025-07-14 19:02:02.245 5451-5506 AudioDecoder org.cocos2d.demo D Decoding (@assets/assets/game/native/92/921f296e-e66d-4abd-89b5-5278346f0cd6.d3c80.mp3) to pcm data wasted 40.580002ms 2025-07-14 19:02:02.245 5451-5506 AudioDecoder org.cocos2d.demo V Resample: 22050 --> 48000 2025-07-14 19:02:02.245 5451-5506 AudioResampler org.cocos2d.demo V resampler load 0 -> 6 MHz due to delta +6 MHz from quality 2 2025-07-14 19:02:02.245 5451-5506 AudioResampler org.cocos2d.demo V Create cubic Resampler 2025-07-14 19:02:02.245 5451-5506 AudioDecoder org.cocos2d.demo V resample() 18808 output frames 2025-07-14 19:02:02.247 5451-5506 AudioDecoder org.cocos2d.demo V outFrames: 18808 2025-07-14 19:02:02.247 5451-5506 AudioDecoder org.cocos2d.demo V resample() complete 2025-07-14 19:02:02.247 5451-5506 AudioDecoder org.cocos2d.demo V reset() complete 2025-07-14 19:02:02.247 5451-5506 AudioResampler org.cocos2d.demo V resampler load 6 -> 0 MHz due to delta -6 MHz from quality 2 2025-07-14 19:02:02.252 5451-5506 AudioDecoder org.cocos2d.demo V pcm buffer size: 75232 2025-07-14 19:02:02.254 5451-5506 AudioDecoder org.cocos2d.demo D Resampling (@assets/assets/game/native/92/921f296e-e66d-4abd-89b5-5278346f0cd6.d3c80.mp3) wasted 8.943000ms 2025-07-14 19:02:02.254 5451-5506 AudioDecoder org.cocos2d.demo I Audio channel count is 2, no need to interleave 2025-07-14 19:02:02.254 5451-5506 AudioDecoder org.cocos2d.demo D Interleave (@assets/assets/game/native/92/921f296e-e66d-4abd-89b5-5278346f0cd6.d3c80.mp3) wasted 0.104000ms 2025-07-14 19:02:02.254 5451-5506 AudioPlayerProvider org.cocos2d.demo V decode succeed 2025-07-14 19:02:02.254 5451-5506 AudioPlayerProvider org.cocos2d.demo V preload (@assets/assets/game/native/92/921f296e-e66d-4abd-89b5-5278346f0cd6.d3c80.mp3) callback count: 1 2025-07-14 19:02:02.254 5451-5506 AudioPlayerProvider org.cocos2d.demo V FileInfo (0x763874c2e030), Set isSucceed flag: 1, path: @assets/assets/game/native/92/921f296e-e66d-4abd-89b5-5278346f0cd6.d3c80.mp3 2025-07-14 19:02:02.254 5451-5478 AudioPlayerProvider org.cocos2d.demo V FileInfo (0x763874c2e030), Waitup preload (@assets/assets/game/native/92/921f296e-e66d-4abd-89b5-5278346f0cd6.d3c80.mp3) ... 2025-07-14 19:02:02.254 5451-5506 AudioDecoder org.cocos2d.demo V ~AudioDecoder() 0x7638889762f0 2025-07-14 19:02:02.255 5451-5478 PcmAudioPlayer org.cocos2d.demo V PcmAudioPlayer constructor: 0x76387a63e020 2025-07-14 19:02:02.255 5451-5478 AssetFd org.cocos2d.demo V ~AssetFd: 11 2025-07-14 19:02:02.255 5451-5478 PcmAudioPlayer org.cocos2d.demo V PcmAudioPlayer (0x76387a63e020) play, url: @assets/assets/game/native/92/921f296e-e66d-4abd-89b5-5278346f0cd6.d3c80.mp3 2025-07-14 19:02:02.301 5451-5478 jswrapper org.cocos2d.demo D JS: [game-logger] 1334 2025-07-14 19:02:02.332 1452-5510 NuPlayerDriver mediaserver D notifyListener_l(0xf4419800), (211, 0, 0, 20), loop setting(0, 1) 2025-07-14 19:02:02.409 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:02.590 1452-5510 NuPlayerDriver mediaserver D notifyListener_l(0xf4419800), (211, 0, 0, 20), loop setting(0, 1) 2025-07-14 19:02:02.617 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:02.636 5451-5478 chatty org.cocos2d.demo I uid=10051(org.cocos2d.demo) GLThread 168 identical 1 line 2025-07-14 19:02:02.660 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:02.677 5451-5507 AudioMixerController org.cocos2d.demo V Play over ... 2025-07-14 19:02:02.677 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:02.677 5451-5507 AudioMixerController org.cocos2d.demo V Doesn't have enough tracks: 1, 1 2025-07-14 19:02:02.680 5451-5478 AudioEngineImpl org.cocos2d.demo V Removing player id=1, state:5 2025-07-14 19:02:02.680 5451-5478 PcmAudioPlayer org.cocos2d.demo V In the destructor of PcmAudioPlayer (0x76387a63e020) 2025-07-14 19:02:02.680 5451-5478 Track org.cocos2d.demo V ~Track(): 0x7638705f4880 2025-07-14 19:02:02.690 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:02.774 5451-5478 chatty org.cocos2d.demo I uid=10051(org.cocos2d.demo) GLThread 168 identical 7 lines 2025-07-14 19:02:02.787 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:02.789 1411-1411 healthd healthd I type=1400 audit(0.0:1144): avc: denied { read } for name="present" dev="sysfs" ino=6625 scontext=u:r:healthd:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=1 2025-07-14 19:02:02.789 1411-1411 healthd healthd I type=1400 audit(0.0:1144): avc: denied { open } for path="/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0C0A:00/power_supply/BAT0/present" dev="sysfs" ino=6625 scontext=u:r:healthd:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=1 2025-07-14 19:02:02.789 1411-1411 healthd healthd W type=1300 audit(0.0:1144): arch=c000003e syscall=257 success=yes exit=9 a0=ffffff9c a1=763917028360 a2=a0000 a3=0 items=0 ppid=1 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 exe="/system/bin/healthd" subj=u:r:healthd:s0 key=(null) 2025-07-14 19:02:02.797 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:02.823 5451-5478 chatty org.cocos2d.demo I uid=10051(org.cocos2d.demo) GLThread 168 identical 2 lines 2025-07-14 19:02:02.834 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 2025-07-14 19:02:02.848 1452-5510 NuPlayerDriver mediaserver D notifyListener_l(0xf4419800), (211, 0, 0, 20), loop setting(0, 1) 2025-07-14 19:02:02.848 5451-5478 HostConnection org.cocos2d.demo D glGetError exceeded. 解决问题了吗
07-15
import ToolBenefitOperator from '@aiComponents/BenefitOperator'; import AiToolBlockItem from '@aiComponents/BlockItem'; import { AiToolSquareCoverCard } from '@aiComponents/CardItems'; import AiToolConfigProvider from '@aiComponents/ConfigProvider'; import DrawSizeControls from '@aiComponents/DrawSizeControls'; import DrawStepOperateLayoutPC from '@aiComponents/DrawStepOperateLayout/pc'; import AiToolGenerateModal from '@aiComponents/GenerateModal'; import ToolVerticalIntroduceLayoutPC2 from '@aiComponents/IntroduceLayout/pc/vertical2'; import ToolVerticalIntroduceLayoutContent1 from '@aiComponents/IntroduceLayout/pc/vertical2/componetns/content1'; import MaterialIntroduceModal from '@aiComponents/MaterialIntroduceModal'; import { AiToolVipOptionItem } from '@aiComponents/OptionItems'; import ToggleGenerateInfoPanelItem from '@aiComponents/ToggleInfoPanel/PanelItem.tsx'; import { QuestionCircleOutlined } from '@ant-design/icons'; import IconFont from '@components/IconFont'; import ImageSelectorWrapModal from '@components/ImageSelectorWrapModal'; import ProductAuth from '@components/ProductAuth'; import ThemeButton from '@components/ThemeButton'; import ThemeConfigProvider from '@components/ThemeConfigProvider'; import ThemeSegmented from '@components/ThemeSegmented'; import ThemeTextArea from '@components/ThemeTextArea'; import ToolEquityCountWrap from '@components/ToolEquityCountWrap'; import { requestAdvanceDrawSubStyleConfigCategory } from '@services/advanceDraw/config.ts'; import { requestComfyUIDrawGenerate } from '@services/advanceDraw/generate.ts'; import { requestModelRender } from '@services/comfyUI.ts'; import { CoolImage } from '@wander/common-components'; import { Collapse, Image, message, Popover, Typography } from 'antd'; import classNames from 'classnames/bind'; import type { CSSProperties } from 'react'; import { useTranslation } from 'react-i18next'; import type { UploadImageType } from '@/components/UploadImageCard'; import UploadImageCard from '@/components/UploadImageCard'; import { enlargeDownloadOptions } from '@/config/aiTool.ts'; import { jzxzComfyUIDrawSizeTypeList } from '@/config/comfyUI.ts'; import KjlResultQuickAccessBox from '@/pages/AiTools/components/KjlResultQuickAccessBox'; import ToggleGenerateInfoPopover from '@/pages/AiTools/components/ToggleInfoPanel'; import { lockingMaterialList } from '@/pages/AiTools/Draw/configs.ts'; import GenerateCountLimitModal from '@/pages/AiTools/InspirationDraw/Operate/jzxz/components/GenerateCountLimitModal'; import { modelRenderGenerateCountList, modelRenderSpeedupKey, modelRenderToolKey, modelRenderToolName, TRACK_MODEL_RENDER_NAME, } from '@/pages/AiTools/ModelRender/config.ts'; import JzxzResultQuickAccessBox from '@/pages/AiTools/ModelRender/Operate/components/JzxzQuickToolMenu'; import ModelRenderStyleCategoryGrid from '@/pages/AiTools/ModelRender/Operate/components/StyleCategoryGrid'; import useModelRender from '@/pages/AiTools/ModelRender/Operate/hooks.ts'; import { LockingMaterialTypeEnum } from '@/types/draw.ts'; import styles from './index.module.less'; const cx = classNames.bind(styles); const { Paragraph } = Typography; const { Panel } = Collapse; const ModelRenderOperatePC = () => { const { spatialPositionConfig, setSpatialCategoryIndex, imageSelectorWrapModalRef, materialIntroduceModalRef, generateComfyUiModalRef, setSelectPositionIndex, generateParams, resultImageSelectIndex, setLockingMaterialType, introduceLayoutShow, setIntroduceLayoutShow, setDescription, modelScenarioActiveIndex, onBaseImageFinish, setPreciseRender, onComfyUiGenerateSuccess, onBaseImageChange, onStepStart, styleCategoryList, spatialCategoryIndex, baseImageCardRef, productType, styleCategoryGridRef, setStyleCategoryList, toolEquityCountWrapRef, drawStepOperateLayoutRef, generateComfyUiPreciseRenderingModalRef, description, lockingMaterialType, preciseRender, selectPositionIndex, styleImageCardRef, handleScenarioClick, setFilteredStyleCategoryList, jzxzCategoryList, filteredStyleCategoryList, scenarioKey, onGenerateCountsChange, generateCounts, sizeType, setSizeType, limitModalOpen, setLimitModalOpen, generateCountLimitModalRef, baseImageTagList, } = useModelRender(); const { t } = useTranslation(); // 第一步 底图的上传 const firstStepRender = (uploadImage: UploadImageType | null) => { return ( <> <div className={cx('first_content')}> <UploadImageCard.Card style={{ minHeight: '100%', height: 'auto', }} ref={baseImageCardRef} onUploadImageChange={onBaseImageChange} enableKjlUpload enableScreenshot={productType === 'JZXZ'} uploadImageIcon={{ customUploadBtn: (className) => { return ( <> <div className={className} onClick={() => { imageSelectorWrapModalRef.current?.setModalStatus('SELECT_MODAL'); }} > {t('HuabanUploadBtn-rWrt')} </div> </> ); }, }} onScreenshotSuccess={(value) => { imageSelectorWrapModalRef.current?.setModalStatus('LEAFER_FRAME'); imageSelectorWrapModalRef.current?.onGenerateFrame({ width: value.width, height: value.height, url: value.largeUrl, }); setTimeout(() => { imageSelectorWrapModalRef.current?.setOperationType('CLIP_FRAME'); }, 600); }} hidden={!!uploadImage} /> <div className={cx('image_wrap')} hidden={!uploadImage}> <CoolImage placeholder={{ type: 'loadingIcon' }} className={cx('image')} style={{ objectFit: 'contain' }} src={uploadImage?.largeUrl} alt="" /> </div> <div className={cx('operator_btn_wrap')} hidden={!uploadImage}> <IconFont type="micro-icon-edit" className={cx('operator_icon')} onClick={() => { imageSelectorWrapModalRef.current?.setModalStatus('LEAFER_FRAME'); // 画板没有原图信息的时候 先创建画板 const originImageInfo = imageSelectorWrapModalRef.current?.getOriginImgInfo(); if (!originImageInfo?.url && uploadImage) { imageSelectorWrapModalRef.current?.onGenerateFrame({ url: uploadImage?.largeUrl, width: uploadImage.width, height: uploadImage.height, }); } }} /> <IconFont type="micro-icon-trash-can" className={cx('operator_icon')} onClick={() => { baseImageCardRef.current?.setUploadImage(null); imageSelectorWrapModalRef.current?.clearFrame(); }} /> </div> </div> </> ); }; // JKJL 第二步内容 const secondStepRender = ( <> <div className={cx('first_category_wrap')}> {styleCategoryList.map((value, index) => ( <div key={value.mid} className={cx('first_category_item', { active: index === spatialCategoryIndex, })} onClick={async () => { setSpatialCategoryIndex(index); styleCategoryGridRef.current?.setFirstCategoryIndex(index); styleCategoryGridRef.current?.resetSecondCategoryIndex?.(); if (!value.children && value.justCategory) { try { styleCategoryGridRef.current?.setSecondCategoryRequesting(true); const subCategoryList = await requestAdvanceDrawSubStyleConfigCategory(value.mid); // 替换当前类目下的子类目信息 setStyleCategoryList( styleCategoryList.map((value1, index1) => { if (index1 === index) { return { ...value1, children: subCategoryList, }; } return value1; }), ); styleCategoryGridRef.current?.setSecondCategoryRequesting(false); } catch (e) { styleCategoryGridRef.current?.setSecondCategoryRequesting(false); console.error(e); } } }} > {value.name} </div> ))} </div> <div className={cx('spatial_position_wrap')}> {spatialPositionConfig[styleCategoryList[spatialCategoryIndex]?.mid || '']?.map( (value, index) => ( <div className={cx('spatial_position_item', { active: index === selectPositionIndex, })} key={index} onClick={() => { setSelectPositionIndex(index); }} > <AiToolSquareCoverCard coverUrl={value.coverUrl} extra={<span className={cx('spatial_position_name')}>{value.name}</span>} /> </div> ), )} </div> </> ); // JZXZ第二步 const jzxzSecondStepRender = () => { const currentList = filteredStyleCategoryList.length > 0 ? filteredStyleCategoryList : styleCategoryList; // 获取当前选中的类目MID const currentCategoryMid = currentList[spatialCategoryIndex]?.mid; return ( <> <div className={cx('first_category_wrap')}> {currentList.map((value, index) => ( <div key={value.mid} className={cx('first_category_item', { active: index === spatialCategoryIndex, })} onClick={async () => { setSpatialCategoryIndex(index); console.log('index', index); styleCategoryGridRef.current?.setFirstCategoryIndex(index); if (!value.children && value.justCategory) { try { styleCategoryGridRef.current?.setSecondCategoryRequesting(true); const subCategoryList = await requestAdvanceDrawSubStyleConfigCategory( value.mid, ); // 更新原始列表 setStyleCategoryList((prev) => prev.map((item) => item.mid === value.mid ? { ...item, children: subCategoryList } : item, ), ); // 更新过滤列表 setFilteredStyleCategoryList((prev) => prev.map((item) => item.mid === value.mid ? { ...item, children: subCategoryList } : item, ), ); styleCategoryGridRef.current?.setSecondCategoryRequesting(false); } catch (e) { styleCategoryGridRef.current?.setSecondCategoryRequesting(false); console.error(e); } } }} > {value.name} </div> ))} </div> {currentCategoryMid && spatialPositionConfig[currentCategoryMid] && ( <div className={cx('spatial_position_wrap')}> {spatialPositionConfig[currentCategoryMid].map((value, index) => ( <div className={cx('spatial_position_item', { active: index === selectPositionIndex, })} key={index} onClick={() => setSelectPositionIndex(index)} > <AiToolSquareCoverCard coverUrl={value.coverUrl} extra={<span className={cx('spatial_position_name')}>{value.name}</span>} /> </div> ))} </div> )} </> ); }; // 酷家乐-精确渲染 const secondCategoryPreciseRendering = (url: string) => ( <> {/* 二级类目前新增精确渲染 */} <div className={cx('second_category_item', { active: preciseRender, })} onClick={() => { setPreciseRender(true); }} > <AiToolSquareCoverCard coverUrl={url} extra={ <> <div className={cx('second_category_recommended')}> <span>推荐</span> </div> <span className={cx('second_category_name')}>精确渲染</span> </> } /> </div> </> ); // 第三步内容 const thirdStepRender = ( <> <ModelRenderStyleCategoryGrid ref={styleCategoryGridRef} categoryList={styleCategoryList} onCategoryListChange={(list) => { setStyleCategoryList(list); }} secondCategoryExtra={[ secondCategoryPreciseRendering( 'https://gd-hbimg.huaban.com/d113fdba55b570c14f9e6dd85053e20fe66e59f5cd9c6-KWo2yS_fw1200webp', ), secondCategoryPreciseRendering( 'https://gd-hbimg.huaban.com/4d623892958842956954557d10427f47f7331c3bcfbdc-Xa8fgu_fw1200webp', ), ]} hideActive={preciseRender} onSecondCategoryChange={() => { setPreciseRender(false); }} scenarioKey={scenarioKey} /> {!preciseRender || (scenarioKey !== 'indoor' && ( <> <div className={cx('step_title')} style={{ marginTop: 40 }}> 更多设置 </div> <ProductAuth productTypes={['JKJL']}> <div className={cx('step_sub_title')}> 上传风格参考图和添加更多设置可以定制化生成对应风格,进一步加强生成图的风格准确性,此处做选填。 </div> </ProductAuth> <Collapse ghost expandIconPosition="end"> <ProductAuth productTypes={['JKJL']}> <Panel header="上传参考图(选填)" key="reference"> <div className={cx('reference_image_wrap')}> <UploadImageCard> {() => <UploadImageCard.Card hideDeleteBtn={false} ref={styleImageCardRef} />} </UploadImageCard> </div> </Panel> </ProductAuth> <Panel header="更多设置(选填)" key="more"> <div className={cx('more_settings_wrap')}> <ThemeConfigProvider themeConfigs={{ JKJL: { textArea: { borderColor: '#dfdfdf', borderWidth: '1px', }, segmented: { '--border-width': '1px', '--border-color': '#dfdfdf', } as CSSProperties, }, }} > <AiToolBlockItem title="描述词"> <ThemeTextArea placeholder="写下你的绘画想法和创意" value={description} onChange={(e) => { setDescription(e.target.value); }} /> </AiToolBlockItem> <AiToolBlockItem title={ <span> {t('AiTools-Draw-ControlNet-BaseImage-WREs5')} <QuestionCircleOutlined style={{ marginLeft: 4 }} onClick={() => { materialIntroduceModalRef.current?.setModalStatus('INTRODUCE'); }} /> </span> } extra={ <ThemeSegmented block style={{ width: 180 }} value={lockingMaterialType} options={lockingMaterialList.map((item) => ({ label: t(item.labelKey), value: item.value, }))} onChange={(item) => { setLockingMaterialType(item.value); }} /> } /> </ThemeConfigProvider> </div> </Panel> </Collapse> ; </> ))} </> ); // 生成参数弹窗 const generateParamsContent = ( <div> <ToggleGenerateInfoPanelItem title="创意描述"> {() => { return ( <Paragraph ellipsis={{ rows: 4 }}> <span style={{ margin: '10px 0 0', color: 'rgb(255 255 255 / 80%)' }}> {description || '无'} </span> </Paragraph> ); }} </ToggleGenerateInfoPanelItem> <ToggleGenerateInfoPanelItem title="创作类目" description={generateParams.styleAlias?.join('/')} /> <ToggleGenerateInfoPanelItem title="空间位置" description={ spatialPositionConfig[styleCategoryList[spatialCategoryIndex]?.mid || '']?.[ selectPositionIndex ].name || '' } /> <ToggleGenerateInfoPanelItem title="底图"> {(imageCardClassName) => { return ( <div className={imageCardClassName}> <Image src={generateParams.baseImage} preview width="100%" height={154} style={{ objectFit: 'contain', }} /> </div> ); }} </ToggleGenerateInfoPanelItem> {generateParams.styleImage && ( <ToggleGenerateInfoPanelItem title="参考图"> {(imageCardClassName) => { return ( <div className={imageCardClassName}> <Image src={generateParams.styleImage} preview width="100%" height={154} style={{ objectFit: 'contain', }} /> </div> ); }} </ToggleGenerateInfoPanelItem> )} <ToggleGenerateInfoPanelItem title="材质锁定" description={t(LockingMaterialTypeEnum[lockingMaterialType || 'OFF'])} /> </div> ); return ( <> <ToolVerticalIntroduceLayoutPC2 toolName={modelRenderToolName} description="一键AI渲染酷家乐室内设计模型,比传统渲染方式更加真实,细腻,高效~支持多种室内风格渲染!" show={introduceLayoutShow} onClickUseBtn={() => { setIntroduceLayoutShow(false); }} content={ <> <ToolVerticalIntroduceLayoutContent1 items={[ { beforeUrl: 'https://gd-hbimg.huaban.com/dc74bbd45daaaf4973d71e64785ed7e2d6cb0eed5ec75-7Gc6aa', afterUrl: 'https://gd-hbimg.huaban.com/63a044eec1c55566f7304e79d1f1c2828c51c8ba9d774-4jCT7E', }, { beforeUrl: 'https://gd-hbimg.huaban.com/ffefde120630092f0244bf346c1d974e51e5dd9bb5fe2-NvzNpK', afterUrl: 'https://gd-hbimg.huaban.com/2d776cae122ab64c90697906540a706664ce21809d1e6-XyYWf1', }, { beforeUrl: 'https://gd-hbimg.huaban.com/6519e79f2c37ee2a1b75025376b10f6d574edfc4f0d17-8ReO7g', afterUrl: 'https://gd-hbimg.huaban.com/82c0c13e8abcb63243697acde385fc569b9b3fd5ba214-nh471F', }, ]} /> </> } /> <UploadImageCard> {(uploadImage) => ( <> <ProductAuth productTypes={['JKJL']}> <DrawStepOperateLayoutPC trackToolName={TRACK_MODEL_RENDER_NAME} ref={drawStepOperateLayoutRef} downloadConfig={{ enlargeDownloadOptions, }} items={[ { title: '上传模型底图', subTitle: '大师级渲染,从上传底图开始!', content: ( <div className={cx('first_content')}> <UploadImageCard.Card style={{ minHeight: '100%', height: 'auto', }} ref={baseImageCardRef} onUploadImageChange={onBaseImageChange} enableKjlUpload uploadImageIcon={{ customUploadBtn: (className) => { return ( <div className={className} onClick={() => { imageSelectorWrapModalRef.current?.setModalStatus( 'SELECT_MODAL', ); }} > {t('HuabanUploadBtn-rWrt')} </div> ); }, }} onScreenshotSuccess={(value) => { imageSelectorWrapModalRef.current?.setModalStatus('LEAFER_FRAME'); imageSelectorWrapModalRef.current?.onGenerateFrame({ width: value.width, height: value.height, url: value.largeUrl, }); setTimeout(() => { imageSelectorWrapModalRef.current?.setOperationType('CLIP_FRAME'); }, 600); }} hidden={!!uploadImage} /> <div className={cx('image_wrap')} hidden={!uploadImage}> <CoolImage placeholder={{ type: 'loadingIcon' }} className={cx('image')} style={{ objectFit: 'contain' }} src={uploadImage?.largeUrl} alt="" /> </div> <div className={cx('operator_btn_wrap')} hidden={!uploadImage}> <IconFont type="micro-icon-edit" className={cx('operator_icon')} onClick={() => { imageSelectorWrapModalRef.current?.setModalStatus('LEAFER_FRAME'); // 画板没有原图信息的时候 先创建画板 const originImageInfo = imageSelectorWrapModalRef.current?.getOriginImgInfo(); if (!originImageInfo?.url && uploadImage) { imageSelectorWrapModalRef.current?.onGenerateFrame({ url: uploadImage?.largeUrl, width: uploadImage.width, height: uploadImage.height, }); } }} /> <IconFont type="micro-icon-trash-can" className={cx('operator_icon')} onClick={() => { baseImageCardRef.current?.setUploadImage(null); imageSelectorWrapModalRef.current?.clearFrame(); }} /> </div> </div> ), beforeNextStep: async () => { if (!baseImageCardRef.current?.uploadImage) { message.warn('请先上传底图'); return false; } return true; }, }, { title: '选择空间位置', subTitle: '选择正确的位置可以确保生成图更准确。', content: secondStepRender, }, { title: '选择渲染风格', subTitle: '选择想要生成的风格大模型,可以让生成结果更偏向自己的喜好。', content: thirdStepRender, }, ]} onStepStart={onStepStart} uploadImage={uploadImage} resultExtra={ <> {/* 快捷使用 */} <KjlResultQuickAccessBox className={cx('quick_access_box')} extraBottomItems={[ { title: '迭代渲染', iconKey: 'micro-icon-iterative-render', onClick: () => { const generateImage = drawStepOperateLayoutRef.current?.generateImageList[ resultImageSelectIndex ]; if (generateImage) { drawStepOperateLayoutRef.current.setShowType('STEP'); drawStepOperateLayoutRef.current.setCurrent(0); baseImageCardRef.current?.setUploadImage({ thumbUrl: generateImage.url, largeUrl: generateImage.url, width: generateImage.width, height: generateImage.height, }); } }, }, ]} /> {/* 参数明细 */} <ToggleGenerateInfoPopover placement="leftTop" className={cx('generate_params_wrap')} content={generateParamsContent} > {(open) => { return <IconFont type={open ? 'micro-icon-close' : 'micro-icon-tip'} />; }} </ToggleGenerateInfoPopover> </> } stepFooterExtra={ <ToolEquityCountWrap toolKey={modelRenderToolKey} showToolName={modelRenderToolName} trackToolName={TRACK_MODEL_RENDER_NAME} ref={toolEquityCountWrapRef} > <ToolBenefitOperator style={{ marginTop: 8, }} toolKey={modelRenderToolKey} trackToolName={TRACK_MODEL_RENDER_NAME} showToolEquityInfo={() => { toolEquityCountWrapRef.current?.showToolEquityInfo(); }} showToolCountUsageIntro={() => { toolEquityCountWrapRef.current?.showToolCountUsageIntro(); }} showToolBuyCount={() => { toolEquityCountWrapRef.current?.showToolBuyCount(); }} /> </ToolEquityCountWrap> } /> </ProductAuth> <ProductAuth productTypes={['JZXZ']}> <DrawStepOperateLayoutPC trackToolName={TRACK_MODEL_RENDER_NAME} ref={drawStepOperateLayoutRef} downloadConfig={{ enlargeDownloadOptions, }} items={[ { title: '选择模型场景', subTitle: '请根据实际情况选择合适的渲染场景', content: ( <> <div className={cx('scenario_wrap')}> {jzxzCategoryList.map((item, index) => ( <div key={item.key} className={cx('scenario_item', productType.toLowerCase(), { active: modelScenarioActiveIndex === index, })} onClick={() => handleScenarioClick(item, index)} > <div className={cx('scenario_item_image')}> <img src={item.coverUrl} alt={item.name} className={cx('scenario_image')} /> </div> <ThemeButton size="large" shape="circle" className={cx('start_btn', { no_active: modelScenarioActiveIndex !== index, })} > {item.name} </ThemeButton> </div> ))} </div> </> ), }, { title: '上传模型底图', subTitle: '大师级渲染,从上传底图开始!', content: firstStepRender(uploadImage), beforeNextStep: async () => { // if (!baseImageCardRef.current?.uploadImage) { // message.warn('请先上传底图'); // return false; // } if (modelScenarioActiveIndex === 1) { return true; } else { drawStepOperateLayoutRef.current?.setCurrent(3); return false; } }, }, { title: '选择空间位置', subTitle: '选择正确的位置可以确保生成图更准确。', content: jzxzSecondStepRender(), }, { title: '选择渲染风格', subTitle: '选择想要生成的风格大模型,可以让生成结果更偏向自己的喜好。', content: thirdStepRender, previousStep: async () => { if (modelScenarioActiveIndex === 1) { return true; } else { drawStepOperateLayoutRef.current?.setCurrent(1); return false; } }, beforeNextStep: () => { return Promise.resolve(false); }, nextStepBtn: ( <Popover trigger={scenarioKey === 'indoor' ? [] : 'hover'} open={scenarioKey === 'indoor' ? false : undefined} showArrow={false} overlayInnerStyle={{ borderRadius: 10, paddingTop: 8 }} content={ <AiToolConfigProvider themeConfig={{ OptionItem: { '--text-color': '#919191', '--box-background': '#f2f2f2', '--border-radius': '10px', } as CSSProperties, }} > <div className={cx('popover_content')}> {/* 生成尺寸 */} <AiToolBlockItem title={t('AiTools-MixedRawImage-Operate-pc-Jcode')}> <DrawSizeControls value={sizeType} list={jzxzComfyUIDrawSizeTypeList} onChange={(item) => { setSizeType(item); }} /> </AiToolBlockItem> {/* 生成张数 */} <AiToolBlockItem title={t('AiTools-Draw-ConfigPopover-GenerateNum-kijAD')} > <div className={cx('size_grid')}> {modelRenderGenerateCountList.map((item, index) => ( <AiToolVipOptionItem availableType={item.availableType} label={t(item.labelKey)} key={index} active={item.value === generateCounts} onClick={() => { onGenerateCountsChange(item); }} /> ))} </div> </AiToolBlockItem> </div> </AiToolConfigProvider> } > <ThemeButton className={cx('btn_start')} size="large" onClick={onStepStart}> 开始渲染 <IconFont hidden={scenarioKey === 'indoor'} className={cx('icon_down')} type="micro-icon-arrow-down" /> </ThemeButton> </Popover> ), }, ]} uploadImage={uploadImage} resultExtra={ <> <JzxzResultQuickAccessBox className={cx('quick_access_box')} /> </> } stepFooterExtra={ <ToolEquityCountWrap toolKey={modelRenderToolKey} showToolName={modelRenderToolName} trackToolName={TRACK_MODEL_RENDER_NAME} ref={toolEquityCountWrapRef} > <ToolBenefitOperator style={{ marginTop: 8, }} toolKey={modelRenderToolKey} trackToolName={TRACK_MODEL_RENDER_NAME} showToolEquityInfo={() => { toolEquityCountWrapRef.current?.showToolEquityInfo(); }} showToolCountUsageIntro={() => { toolEquityCountWrapRef.current?.showToolCountUsageIntro(); }} showToolBuyCount={() => { toolEquityCountWrapRef.current?.showToolBuyCount(); }} /> </ToolEquityCountWrap> } /> </ProductAuth> </> )} </UploadImageCard> {/* 迁移内容的原图片效果图库 */} <ImageSelectorWrapModal ref={imageSelectorWrapModalRef} queryTagImages={{ categoryList: baseImageTagList, introduce: t('AiTools-DecorationDesign-Operate-pc-f4eJ'), modalTitle: t('AiTools-Draw-ControlNet-BaseImage-b2tNh'), iconClassName: cx('style_refer_image'), }} onFinish={onBaseImageFinish} hideDiyDraw /> {/* 酷家乐 */} <AiToolGenerateModal displayType="MASK" className={cx('generate_mask_container')} customerRef={generateComfyUiModalRef} toolKey={modelRenderToolKey} trackToolName={TRACK_MODEL_RENDER_NAME} request={requestComfyUIDrawGenerate} speedupKey={modelRenderSpeedupKey} pollingConfig={{ processingType: 'COMFYUI_COMPOSE', imageDetectMode: 'NONE', }} onGenerateSuccess={onComfyUiGenerateSuccess} onCancel={() => { // 蒙层关闭 回到进度展示 drawStepOperateLayoutRef.current?.setShowType('STEP'); }} /> {/* 精确渲染 */} <AiToolGenerateModal displayType="MASK" className={cx('generate_mask_container')} customerRef={generateComfyUiPreciseRenderingModalRef} toolKey={modelRenderToolKey} trackToolName={TRACK_MODEL_RENDER_NAME} request={requestModelRender} speedupKey={modelRenderSpeedupKey} pollingConfig={{ processingType: 'COMFYUI_COMPOSE', imageDetectMode: 'NONE', }} onGenerateSuccess={onComfyUiGenerateSuccess} onCancel={() => { // 蒙层关闭 回到进度展示 drawStepOperateLayoutRef.current?.setShowType('STEP'); }} /> <MaterialIntroduceModal ref={materialIntroduceModalRef} /> <GenerateCountLimitModal ref={generateCountLimitModalRef} open={limitModalOpen} onCancel={() => { setLimitModalOpen(false); }} /> </> ); }; export default ModelRenderOperatePC;import { AiToolImageCoverCard, AiToolSquareCoverCard } from '@aiComponents/CardItems'; import AiToolGridList from '@aiComponents/GridList'; import Loading from '@components/Loading'; import ProductAuth from '@components/ProductAuth'; import { requestAdvanceDrawSubStyleConfigCategory } from '@services/advanceDraw/config.ts'; import { useMount } from 'ahooks'; import classNames from 'classnames/bind'; import { floor } from 'lodash'; import type { Dispatch, ReactNode, SetStateAction } from 'react'; import { useCallback } from 'react'; import { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react'; import Media from 'react-media'; import type { GetAdvanceDrawLeafGenerateArgsByMidsType } from '@/pages/AiTools/AdvanceDraw/utils.ts'; import { getComfyUIDrawLeafGenerateArgsByMids } from '@/pages/AiTools/AdvanceDraw/utils.ts'; import { useStore } from '@/store/createStore.ts'; import type { AdvanceDrawStyleCategoryItem } from '@/types/advanceDraw'; import styles from './index.module.less'; const cx = classNames.bind(styles); export type ModelRenderStyleCategoryGridRef = { setFirstCategoryIndex: Dispatch<SetStateAction<number>>; setSecondCategoryRequesting: Dispatch<SetStateAction<boolean>>; getComfyUIDrawLeafGenerateArgsByMids: () => GetAdvanceDrawLeafGenerateArgsByMidsType; // 二级类目名称获取 getSelectedSecondCategoryName: () => string; // 重置二级类目 resetSecondCategoryIndex: () => void; }; type Props = { categoryList: AdvanceDrawStyleCategoryItem[]; onCategoryListChange: (list: AdvanceDrawStyleCategoryItem[]) => void; secondCategoryExtra: ReactNode[]; hideActive: boolean; onSecondCategoryChange: (index: number) => void; // 场景key值 scenarioKey: string; }; // 二级类目最小宽度 const MIN_SECOND_CATEGORY_CARD_WIDTH = 150; // 二级类目间距 const SECOND_CATEGORY_GRID_GAP = 16; /** * 模型渲染风格类目 */ const ModelRenderStyleCategoryGrid = forwardRef<ModelRenderStyleCategoryGridRef, Props>( ( { categoryList, onCategoryListChange, secondCategoryExtra, hideActive, onSecondCategoryChange, scenarioKey, }, ref, ) => { const { productType } = useStore((state) => state.productInfo); const secondCategoryRef = useRef<HTMLDivElement | null>(null); // 二级类目 列数 const [secondCategoryGridColumns, setSecondCategoryGridColumns] = useState(0); // 一级类目索引 const [firstCategoryIndex, setFirstCategoryIndex] = useState(0); // 二级类目索引 const [secondCategoryIndex, setSecondCategoryIndex] = useState(0); // 二级类目请求中 const [secondCategoryRequesting, setSecondCategoryRequesting] = useState(false); // 所有层级分类列表 const { secondCategoryList } = useMemo(() => { if (!categoryList.length) { return { secondCategoryList: [], }; } // 二级类目列表 const secondCategoryList = categoryList[firstCategoryIndex]?.children || []; return { secondCategoryList, }; }, [categoryList, firstCategoryIndex, secondCategoryIndex]); // 计算列数 const calculateColumns = useCallback(() => { if (secondCategoryRef.current?.offsetWidth) { const secondContainerWidth = secondCategoryRef.current?.offsetWidth; // 计算列数 setSecondCategoryGridColumns( floor( (secondContainerWidth + SECOND_CATEGORY_GRID_GAP) / (MIN_SECOND_CATEGORY_CARD_WIDTH + SECOND_CATEGORY_GRID_GAP), ), ); } }, []); useMount(() => { calculateColumns(); }); useImperativeHandle(ref, () => ({ setFirstCategoryIndex, setSecondCategoryRequesting, getComfyUIDrawLeafGenerateArgsByMids: () => { const firstCategory = categoryList[firstCategoryIndex]; const secondeCategory = firstCategory.children?.[secondCategoryIndex]; const selectMids = [firstCategory.mid]; if (secondeCategory) { selectMids.push(secondeCategory.mid); } return getComfyUIDrawLeafGenerateArgsByMids(categoryList, selectMids); }, getSelectedSecondCategoryName: () => { if (categoryList.length > firstCategoryIndex) { const secondCategoryList = categoryList[firstCategoryIndex]?.children || []; if (secondCategoryList.length > secondCategoryIndex) { return secondCategoryList[secondCategoryIndex]?.name || ''; } } return ''; }, resetSecondCategoryIndex: () => { setSecondCategoryIndex(0); }, })); console.log('setFirstCategoryIndex', firstCategoryIndex); return ( <> <div className={cx('first_category_wrap')} hidden={scenarioKey !== 'indoor' && productType === 'JZXZ'} > {categoryList.map((value, index) => ( <div key={value.mid} className={cx('first_category_item', { active: index === firstCategoryIndex, })} onClick={async () => { setFirstCategoryIndex(index); setSecondCategoryIndex(0); if (!value.children && value.justCategory) { try { setSecondCategoryRequesting(true); const subCategoryList = await requestAdvanceDrawSubStyleConfigCategory( value.mid, ); // 替换当前类目下的子类目信息 onCategoryListChange( categoryList.map((value1, index1) => { if (index1 === index) { return { ...value1, children: subCategoryList, }; } return value1; }), ); setSecondCategoryRequesting(false); } catch (e) { setSecondCategoryRequesting(false); console.error(e); } } }} > {value.name} </div> ))} </div> <Media queries={{ small: '(max-width: 768px)', large: '(min-width: 769px)', }} > {(matches) => ( <> {matches.large && ( <> {secondCategoryRequesting && <Loading height={200} iconWidth={100} />} <div className={cx('second_category_wrap')} style={{ gridTemplateColumns: `repeat(${secondCategoryGridColumns}, 1fr)`, }} ref={secondCategoryRef} > <ProductAuth productTypes={['JKJL']}> <div hidden={!secondCategoryList.length}> {secondCategoryExtra[firstCategoryIndex]} </div> </ProductAuth> {secondCategoryList.map((value, index) => ( <div className={cx('second_category_item', { active: productType === 'JKJL' ? index === secondCategoryIndex && !hideActive : index === secondCategoryIndex, })} key={value.mid} onClick={() => { setSecondCategoryIndex(index); onSecondCategoryChange(index); }} > <AiToolSquareCoverCard coverUrl={value.coverUrl} extra={<span className={cx('second_category_name')}>{value.name}</span>} /> </div> ))} </div> </> )} {matches.small && ( <> {secondCategoryRequesting && <Loading height={200} iconWidth={100} />} <div className={cx('second_category_wrap')} ref={secondCategoryRef}> {/* {secondCategoryList.map((value, index) => (*/} {/* <div*/} {/* className={cx('second_category_item', {*/} {/* active:*/} {/* productType === 'JKJL'*/} {/* ? index === secondCategoryIndex && !hideActive*/} {/* : index === secondCategoryIndex,*/} {/* })}*/} {/* key={value.mid}*/} {/* onClick={() => {*/} {/* setSecondCategoryIndex(index);*/} {/* onSecondCategoryChange(index);*/} {/* }}*/} {/* >*/} {/* <AiToolSquareCoverCard*/} {/* coverUrl={value.coverUrl}*/} {/* extra={<span className={cx('second_category_name')}>{value.name}</span>}*/} {/* />*/} {/* </div>*/} {/* ))}*/} <> <AiToolGridList list={secondCategoryList} renderItem={(item, index) => { return ( <AiToolImageCoverCard label={item.name} active={index === secondCategoryIndex} coverUrl={item.coverUrl} onClick={() => { setSecondCategoryIndex(index); onSecondCategoryChange(index); }} /> ); }} /> </> </div> </> )} </> )} </Media> </> ); }, ); export default ModelRenderStyleCategoryGrid; 为什么第一次点击的时候styleCategoryGridRef.current?.setFirstCategoryIndex(index);没有生效firstCategoryIndex依旧是默认的0,第二次点击就生效了
最新发布
08-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值