瀏覽代碼

fix: show real url for relative externals

tophf 11 月之前
父節點
當前提交
212a1dcd8a
共有 2 個文件被更改,包括 20 次插入7 次删除
  1. 2 1
      src/background/utils/db.js
  2. 18 6
      src/common/ui/externals.vue

+ 2 - 1
src/background/utils/db.js

@@ -687,7 +687,8 @@ export async function parseScript(src) {
   if (!getScriptHome(script) && isRemote(src.from)) {
     script.custom.homepageURL = src.from;
   }
-  if (isRemote(src.url)) script.custom.lastInstallURL = src.url;
+  // Allowing any http url including localhost as the user may keep multiple scripts there
+  if (isValidHttpUrl(src.url)) script.custom.lastInstallURL = src.url;
   script.custom.tags = script.custom.tags?.split(/\s+/).map(normalizeTag).filter(Boolean).join(' ').toLowerCase();
   if (!srcUpdate) storage.mod.remove(getScriptUpdateUrl(script, { all: true }) || []);
   buildPathMap(script, src.url);

+ 18 - 6
src/common/ui/externals.vue

@@ -3,7 +3,7 @@
     <div v-if="!install || all.length > 1" class="select"
          ref="$list" focusme @keydown="moveIndex" @scroll="saveScroll"
          :data-has-main="install ? '' : null">
-      <dl v-for="([type, url, contents], i) of all" :key="i"
+      <dl v-for="([type, url, fullUrl, contents], i) of all" :key="i"
           class="flex"
           :class="{
             active: index === i,
@@ -13,7 +13,7 @@
           @click="contents !== false && (index = i)">
         <dt v-text="type"/>
         <dd class="ellipsis flex-1">
-          <a :href="url" target="_blank">&nearr;</a>
+          <a :href="fullUrl" target="_blank">&nearr;</a>
           <span v-text="decodeURIComponent(url)"/>
         </dd>
         <dd v-if="contents" v-text="formatLength(contents, type)" class="ml-2"/>
@@ -40,7 +40,8 @@
 
 <script setup>
 import { computed, nextTick, onActivated, onDeactivated, ref, watchEffect } from 'vue';
-import { dataUri2text, formatByteLength, i18n, makeDataUri, sendCmdDirectly } from '@/common';
+import { dataUri2text, formatByteLength, getFullUrl, i18n, makeDataUri, sendCmdDirectly }
+  from '@/common';
 import VmCode from '@/common/ui/code';
 import { focusMe, hasKeyModifiers } from '@/common/ui/index';
 
@@ -55,11 +56,22 @@ const data = ref({});
 
 const all = computed(() => {
   const { code, deps = dependencies.value, url: mainUrl } = props.install || {};
-  const { require = [], resources = {} } = props.value.meta || {};
+  const { custom: { pathMap = {} } = {}, meta } = props.value;
+  const { require = [], resources = {} } = meta || {};
   return [
     ...mainUrl ? [[i18n('editNavCode'), mainUrl, code]] : [],
-    ...require.map(url => ['@require', url, deps[`0${url}`]]),
-    ...Object.entries(resources).map(([id, url]) => [`@resource ${id}`, url, deps[`1${url}`]]),
+    ...require.map(url => [
+      '@require',
+      url,
+      pathMap[url] || getFullUrl(url, mainUrl),
+      deps[`0${url}`],
+    ]),
+    ...Object.entries(resources).map(([id, url]) => [
+      `@resource ${id}`,
+      url,
+      pathMap[url] || getFullUrl(url, mainUrl),
+      deps[`1${url}`],
+    ]),
   ];
 });