到目前為止,範例已在頁面中顯示內嵌呈現的本機元件。您也可以選擇在內嵌框架中呈現元件。
例如,若您的元件對頁面進行非全面的更新,每當特性變更需要重新建立頁面時,您可以選擇在內嵌框架中呈現元件。此外,遠端元件則一律是在內嵌框架中呈現。
本節中的範例,來自於您建立本機元件時選擇建立可在 iframe 中呈現的元件選項時,系統為您建立的檔案。然而,您可以將檔案集代管在遠端伺服器上,讓他們可以平均套用至遠端元件。
內嵌框架和非內嵌框架元件之間的相似性
設定值面板
因為「設定值」面板一律會置於內嵌框架的頁面中,因此不論元件是否使用內嵌框架,「設定值」面板的程式碼將不會變更。您將為這兩個使用案例建立相同的「設定值」面板程式碼。
Sites SDK API
這兩個使用案例的 SDK API 相同。您將會使用相同的程式碼來引發觸發程式、監聽動作以及取得並設定特性值。雖然某些特性可能無法這兩個案例皆適用 (例如,您無法對未使用內嵌框架的元件設定 "height"
特性),但 API 不會變更。因此,您可以複製這兩種類型元件之間的程式碼,本教學課程中討論的範例程式碼將會適用於這兩個案例。
內嵌框架和非內嵌框架元件之間的差異
檔案結構與相依項
<component name> assets css app-styles.css js jquery.mn.js knockout.mn.js sites.min.js render.html settings.html appinfo.json _folder_icon.jpg
建立這些檔案是為了讓您在頁面上的內嵌框架中立即執行元件。此結構與標準本機元件結構的主要差異是:
JavaScript 相依項:
您正在取得這些檔案的完整複本,以便能執行元件。需要這些檔案,才能執行範例內嵌框架元件。您可以視需要新增和移除此目錄的內容。
因為元件發布時,元件之 assets
目錄底下的所有項目都會發布至公用網站,所以在「網站產生器」中和程式實際執行時都可以使用 js
目錄中的所有項目。
注意:建立這些檔案是為了易於使用。您應在主題或其他公用位置中合併這些檔案,而不是為每個內嵌框架元件個別建立這些檔案的版本。
render.html
:
此為完整 HTML文件,而非標準元件的 render.js
檔案,其為 AMD 模組。
元件「高度」管理
使用內嵌框架的其中一個問題是內嵌框架本身的高度管理。如果設定錯誤,您將會在頁面上看到可能不是您想要的元件捲軸。
為了管理內嵌框架的高度,元件必須告知頁面想要的內嵌框架高度。透過遠端元件,您可以處理跨網域的問題,因此當元件於頁面上呈現之後,您必須使用 Sites SDK 訊息傳遞來要求頁面將內嵌框架設為所需的高度。這可以透過 SitesSDK.setProperty('height', {value})
API 來完成。(請參閱 Oracle Content and Experience SDK。)
例如,建立 setHeight
函數和自訂連結處理程式,以便元件於頁面上呈現時進行呼叫。
更新高度函數:
// set the height of the iFrame for this App self.setHeight = function () { // use the default calculation or supply your own height value as a second parameter SitesSDK.setProperty('height'); };
每當元件於頁面上呈現或特性變更時,Knockout 自訂連結處理程式可呼叫 setHeight
:
ko.bindingHandlers.sampleAppSetAppHeight = { update: function (element, valueAccessor, allBindings, viewModel, bindingContext) { // create dependencies on any observables so this handler is called whenever it changes var imageWidth = viewModel.imageWidth(), imageUrl = viewModel.imageUrl(), titleText = viewModel.titleText(), userText = viewModel.userText(); // re-size the iFrame in the Sites page now the template has rendered // Note: If you still see scrollbars in the iframe after this, it is likely that CSS styling in your app is the issue viewModel.setHeight(); } };
更新樣板以呼叫連結處理程式:
<div data-bind="sampleAppSetAppHeight: true"></div>
觸發程式和動作註冊
雖然不在內嵌框架中之元件的觸發程式/動作註冊是位於 appinfo.json
檔案中,對內嵌框架元件而言,元件本身會負責提供此資訊。這可以使用以下兩個 API 來完成:
SitesSDK.subscribe('GET_ACTIONS', self.getAppActions); SitesSDK.subscribe('GET_TRIGGERS', self.getAppTriggers);
以下為使用這些 API 的範例。
// Register TRIGGERS meta-data SampleAppViewModel.prototype.getAppTriggers = function (args) { var triggers = [{ "triggerName": "imageClicked", "triggerDescription": "Image clicked", "triggerPayload": [{ "name": "payloadData", "displayName": "Trigger Payload Data" }] }]; return triggers; }; // Register ACTIONS meta-data SampleAppViewModel.prototype.getAppActions = function (args) { var actions = [{ "actionName": "setImageWidth", "actionDescription": "Update the image width", "actionPayload": [{ "name": "imageWidth", "description": "Image Width in pixels", "type": { "ojComponent": { "component": "ojInputText" } }, "value": "" }] }]; return actions; };
存取主題樣式
因為元件是在內嵌框架中呈現,所以其無法存取主題中可用的樣式。Sites SDK 提供可擷取這些樣式的 API,讓這些樣式可以套用至內嵌框架中的元素。
步驟 14:在內嵌框架中呈現元件時使用自訂樣式中會進一步探索此主題。
混合 HTTPS 和 HTTP 協定
因為 Oracle Content Management 使用 HTTPS 協定,所有頁面內參照的資源也必須使用 HTTPS
。資源包含將在內嵌框架中呈現的基本 .html
檔案,以及其參照的所有檔案。
此資源要求主要適用於遠端元件,但是您需注意此限制。使用內嵌框架的本機元件資源由 Oracle Content Management 伺服器提供,因此這些元件已使用對應的協定。