0

スクリプトを正常にコーディングして、Google サイトに埋め込みました。スクリプトは Chrome と Safari では正常に動作しますが、Apps Script Gadget で Google の指示に従ってスクリプトを追加したにもかかわらず、IE 内で「このコンテンツはフレームに表示できません」というエラーが表示されます。私のコードを見ると、このコードの特定の部分で IE にセキュリティ上の問題が発生し、表示されないことがありますか? このコードは、スプレッドシートをタブ付きのチャートにロードし (大きなスプレッドシートなので、タブに分割しました)、ユーザーはいくつかの異なるフィールドに基づいてフィルター処理できます。これに対する回避策はありますか?

function doGet(e) {
  var app = UiApp.createApplication();
  var ssID = '0AhiXAz5qhL4TdERkNFJndkVXd1A3T0xYdHlnMkp3U2c';
  var ss = SpreadsheetApp.openById(ssID);
  var sheet = ss.getSheets()[0];
  var dataRange = sheet.getDataRange();
  var numRows = dataRange.getNumRows();
  var numCols = dataRange.getNumColumns();
  var dataTable = sheet.getRange(1, 4, numRows, numCols - 3).getDataTable();

  // Filters
  var locationFilter = Charts.newCategoryFilter()
    .setDataTable(dataTable)
    .setFilterColumnLabel('Where was your role located?')
    .setAllowMultiple(true)
    .setSortValues(true)
    .setLabelStacking(Charts.Orientation.VERTICAL)
    .setCaption('Choose a location')
    .setSortValues(true)
    .build();
  var functionFilter = Charts.newCategoryFilter()
    .setDataTable(dataTable)
    .setFilterColumnLabel('In what function was your role?')
    .setAllowMultiple(true)
    .setSortValues(true)
    .setLabelStacking(Charts.Orientation.VERTICAL)
    .setCaption('Choose a function')
    .setSortValues(true)
    .build();
   var titleFilter = Charts.newCategoryFilter()
    .setDataTable(dataTable)
    .setFilterColumnLabel('What was the role title?')
    .setAllowMultiple(true)
    .setSortValues(true)
    .setLabelStacking(Charts.Orientation.VERTICAL)
    .setCaption('Choose a title')
    .setSortValues(true)
    .build();
  var numberFilter = Charts.newCategoryFilter()
    .setDataTable(dataTable)
    .setFilterColumnLabel('Which placement was the role?')
    .setAllowMultiple(true)
    .setSortValues(true)
    .setLabelStacking(Charts.Orientation.VERTICAL)
    .setCaption('Choose a placement number')
    .setSortValues(true)
    .build();


  // Build individual tab charts
  // Tab 1: Role Specific
  var dataViewDef1 = Charts.newDataViewDefinition().setColumns([0, 1, 2, 3, 4, 5, 6, 7, 8]);
  var chart1 = Charts.newTableChart().setDataTable(dataTable).setOption('width', '100%').setOption('height', '100%').setDataViewDefinition(dataViewDef1).build();

  // Tab 2: Training
  var dataViewDef2 = Charts.newDataViewDefinition().setColumns([0, 1, 2, 3, 9, 10, 11]);
  var chart2 = Charts.newTableChart().setDataTable(dataTable).setOption('width', '100%').setOption('height', '100%').setDataViewDefinition(dataViewDef2).build();

  // Tab 3: Line Manager
  var dataViewDef3 = Charts.newDataViewDefinition().setColumns([0, 1, 2, 3, 12, 13]);
  var chart3 = Charts.newTableChart().setDataTable(dataTable).setOption('width', '100%').setOption('height', '100%').setDataViewDefinition(dataViewDef3).build();

  // Tab 4: Development Tools
  var dataViewDef4 = Charts.newDataViewDefinition().setColumns([0, 1, 2, 3, 14, 15]);
  var chart4 = Charts.newTableChart().setDataTable(dataTable).setOption('width', '100%').setOption('height', '100%').setDataViewDefinition(dataViewDef4).build();

  // Tab 5: Culture, Visas, and Moves
  var dataViewDef5 = Charts.newDataViewDefinition().setColumns([0, 1, 2, 3, 16, 17]);
  var chart5 = Charts.newTableChart().setDataTable(dataTable).setOption('width', '100%').setOption('height', '100%').setDataViewDefinition(dataViewDef5).build();

  // Create GUI
  var tabPanel = app.createTabPanel();
  var vpanel = app.createVerticalPanel().setSpacing(10);
  var scroll = app.createScrollPanel().setId('scroll').setSize('100%', '100%');

  tabPanel.add(chart1, 'Role Specific').add(chart2, 'Training').add(chart3, 'Line Manager').add(chart4, 'Development').add(chart5, 'Culture');
  tabPanel.selectTab(0);
  vpanel.add(locationFilter).add(functionFilter).add(titleFilter).add(numberFilter).add(tabPanel);

  var dashboard = Charts.newDashboardPanel().setDataTable(dataTable).bind([locationFilter, functionFilter, titleFilter, numberFilter], [chart1, chart2, chart3, chart4, chart5]).build();

  dashboard.add(vpanel);

  app.add(dashboard);

  return app;

}
4

2 に答える 2

0

Chrome で正常に動作する Google サイトの実験的なスクリプト ガジェットを別のコンピューターの IE11 で実行すると、フレーム エラー メッセージが表示されました。すると、そのコンピューターで別の Google アカウントにサインインしていて、「自分だけ」のスクリプト ガジェットを公開していたことに気付きました。「Web アプリとしてデプロイ」の公開メニューで、この設定を「誰でも」に変更しました。 これで、私のスクリプトは IE11 でフレーム エラーなしで正常に動作します。

于 2017-01-03T22:42:07.010 に答える
0

スクリーンショットが役立つ場合があります。しかし、問題のエラー メッセージの説明に基づいて、サーバーがフレーミングを防ぐためにX-FRAME-OPTIONS: DENYorヘッダーを送信すると、これが表示されます。X-FRAME-OPTIONS: SameOrigin

このヘッダーは、クリックジャッキング攻撃に対抗するために使用されます。

詳細については、 http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspxを参照してください。

于 2013-08-20T17:54:07.157 に答える