# 针对所有应用的变更

#### ArkUI

#### List组件onScrollVisibleContentChange事件行为变更

**变更原因**

List组件onScrollVisibleContentChange事件索引输出规则与空列表参数设计定义不符，原列表从有数据切换成没有数据时复用旧start和end参数，优化后该场景start和end参数的index成员均为-1，itemGroupArea和itemIndexInGroup成员均为undefined，符合空列表参数设计定义。

**变更影响**

此变更涉及应用适配。

此变更已做版本隔离，变更仅在应用的targetSdkVersion设置为大于等于26.0.0时生效。

*   变更前：List组件onScrollVisibleContentChange事件从有子组件切换到没有子组件时，上报的start和end参数均为原值。
    
*   变更后：List组件onScrollVisibleContentChange事件从有子组件切换到没有子组件时，上报的start和end参数的index成员均为-1，itemGroupArea和itemIndexInGroup成员均为undefined。
    

```
@Entry
@Component
struct ListExample {
  @State listData: string[] = ['item1', 'item2', 'item3'];

  build() {
    Column() {
      Button('清空列表数据')
        .onClick(() => {
          this.listData = [];
        })
      List() {
        ForEach(this.listData, (item: string) => {
          ListItem() {
            Text(item)
              .width('100%')
              .height(100)
              .textAlign(TextAlign.Center)
          }
        })
      }
      .width('100%')
      .height('100%')
      .onScrollVisibleContentChange((start, end) => {
        console.info(`start: ${start.index}, end: ${end.index}`);
        // 变更前：当listData从['item1', 'item2', 'item3']变为[]时，打印 start: 0, end: 2
        // 变更后：当listData从['item1', 'item2', 'item3']变为[]时，打印 start: -1, end: -1
      })
    }
  }
}
```

**起始 API Level**

12

**变更的接口/组件**

onScrollVisibleContentChange事件

**适配指导**

如果应用依赖onScrollVisibleContentChange事件的start和end参数来判断列表内容变化，当列表从有内容变为空时，开发者需要适配start和end参数的index为-1的场景。例如，开发者需要在事件回调中判断index是否为-1，以区分列表为空的情况。

```
@Entry
@Component
struct ListExample {
  @State listData: string[] = ['item1', 'item2', 'item3'];

  build() {
    Column() {
      Button('清空列表数据')
        .onClick(() => {
          this.listData = [];
        })
      List() {
        ForEach(this.listData, (item: string) => {
          ListItem() {
            Text(item)
              .width('100%')
              .height(100)
              .textAlign(TextAlign.Center)
          }
        })
      }
      .width('100%')
      .height('100%')
      .onScrollVisibleContentChange((start, end) => {
        // 适配指导：判断列表是否为空
        if (start.index === -1 && end.index === -1) {
          console.info('列表为空');
        } else {
          console.info(`可见列表项范围：start: ${start.index}, end: ${end.index}`);
        }
      })
    }
  }
}
```

#### ArkWeb

#### Cookie存储目录变更

**变更原因**

ArkWeb产生的Cookie目前存储在应用的缓存目录下，清空应用缓存会同时清除Cookie数据，导致Web页面内的登录态丢失。

**变更影响**

此变更涉及应用适配。

变更前：ArkWeb的Cookie存储在应用的缓存目录（/data/storage/el2/base/cache/web/Cookies）下，清空应用缓存（/data/storage/el2/base/cache）会同时清除Cookie数据。

变更后：ArkWeb的Cookie存储在应用的数据目录下，清空应用缓存（/data/storage/el2/base/cache）不会清除Cookie数据。

**起始 API Level**

9

**变更的接口/组件**

不涉及

**适配指导**

若应用期望在清空应用缓存时同时清除Cookie，需使用clearAllCookiesSync11+、clearAllCookies11+（callback）或clearAllCookies11+（Promise）接口清除Cookie。