この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Salesforce ドメインでの JavaScript の実行

複数のベンダーからの JavaScript コードを同じオリジンで実行できます。コードの干渉を防ぐため、ベンダーの JavaScript コードは Sandbox 化されます。Sandbox の外に出したり、オリジンの外部でコードを実行したりしようとしないでください。適切なオリジンで実行される Visualforce、Aura、または Lightning Web コンポーネントを使用します。

Salesforce 組織では、パッケージ化されていない顧客コード、Salesforce コード、パッケージ化されているコードなど、多くの異なる種類の JavaScript コードが実行されます。一般にコードは、互いに共同作業する手段を持たない複数のベンダーから提供されます。それらのコードを同じオリジンで実行すると、あるベンダーのコードが他のベンダーのコードに干渉する場合があります。

コードの干渉を防ぐため、ベンダーの JavaScript コードは Sandbox 化されます。Visualforce ソリューションの場合、JavaScript コードは、一意のベンダー固有のオリジンで Sandbox 化されます。Lightning ソリューションと Lightning Web コンポーネント (LWC) の場合、JavaScript は、一意のベンダー固有の Locker で Sandbox 化されます。

Sandbox の外に出したり、オリジンの外部でコードを実行したりしようとすることは、セキュアなコーディングに違反します。ベンダーが作成した JavaScript コードを、ホームページコンポーネント、Web リンク、またはカスタムボタンを介して Salesforce オリジンで実行しようとすることも、セキュアなコーディングの違反に含まれます。

多くの場合、適切なオリジンで実行される Visualforce、Aura、または Lightning Web コンポーネントを使用して、同じ機能を実現できます。

メタデータの例

この例のメタデータは、カスタムオブジェクトを表しています。このカスタムオブジェクト内の Web リンクは、REQUIRESCRIPT ステートメントを使用して定義されます。管理パッケージで REQUIRESCRIPT を使用すると、セキュリティの脆弱性が生じます。これは、ベンダーがそのコードを Salesforce オリジンに挿入するからです。管理パッケージは、名前空間の Sandbox 内にとどまる必要があります。この Sandbox の外でスクリプトを実行することはできません。
1<?xml version=”1.0”encoding="UTF-8"?>
2<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
3<actionOverrides>
4<actionName>Accept</actionName>
5      <type>Default</type>
6</actionOverrides>
7<webLinks>
8     <fullName>Add_to_List</fullName>
9     <openType>onClickJavaScript</openType>
10     <url>{!REQUIRESCRIPT(&quot;/soap/ajax/30.0/connection.js&quot;)}</url>
11</webLinks>
12...
13</CustomObject>

オブジェクトにコードを直接埋め込むのではなく、Visualforce Aura コンポーネントの Visualforce ボタンを作成するか、または Lightning Web コンポーネントを使用してください。