2017-11-22 26 views
2

他のリソース(具体的にはDOMに追加するiframeの場合はsrc)を読み込む必要のあるJS Webコンポーネントがありますが、これは相対的なパス)。現在のJS Webコンポーネントへのパスを取得します

このリソースは、呼び出し側のページを基準にして指定する必要があります。これは、window.locationから十分に簡単に取得できます。

しかし、srcを指し示す必要があるファイルは、実行されているJSファイルとの相対的なものであり、それがコンポーネントであるため、どこにあるかはわかりません。

ので:コンポーネントはnode_modulesまたはbower_componentsまたはwebpackOutputまたはどこにあるかもしれない

example.com/index.html 
    |__> {unknown path}/web-component.js 
    |__> {unknown path}/resource.html <-- I want to get this 

が、DOM、それはそれはから提供された同じ場所を指すようにニーズを作成し、いない実行だページそれ。

このコードはWebコンポーネントにあり、およびdocument.getElementsByTagName('script')にはコンポーネントが含まれていない可能性があります。

+0

この回答は役に立ちます:https://stackoverflow.com/questions/3133243/how-do-i-get-the-path-to-the-current-script-with-node-js – admcfajn

+0

@admcfajn乾杯、それはnode.jsにも当てはまりますが、私はWeb環境にいます。私はnode.jsサーバー側でハードコードされたパスを持つようにファイルを編集することができますが、それは本当に最後の手段です。 – Keith

+0

ええ、私はこのような状況のために全然一本だとは思わない。下の素晴らしい考え。これも役立つかもしれません:https://stackoverflow.com/questions/39410541/how-to-get-original-file-path-in-the-script-with-webpackあなたはウェブ環境にいますが、あなたはノードでプリコンパイルするのは正しいですか? – admcfajn

答えて

0

私は潜在的な解決策を持っていますが、ブラウザの互換性とパフォーマンスの問題の可能性があります。

考えられるのはnew Error().stackです。ファイルへのパスが含まれています。

より良い方法で答えが歓迎されているので、だから... ...、

// Get stack string 
const stack = new Error().stack.split('at'); 

// Get the last entry 
const scriptPath = stack[stack.length - 1].trim(); 

// The component will share the path up to the last slash 
const componentPath = scriptPath.substring(0, scriptPath.lastIndexOf('/')); 

それはスタックの内容、スタックの形式に依存している、そしてそれはロードとしてnew Error()は、任意のパフォーマンスの問題を引き起こしていません!

関連する問題